想要自动执行移动多个文件的过程



我是计算机和编程世界的新手。

@echo off
for /l %%i in (1,1,8) do (
for /f "delims=" %%f in ('findstr  /mc:" segment %%i " 
C:UsersKing_ArthurDesktopfileMyfile_split_filesMyfile_.txt') do (
move "%%f" "segment %%i"
)
)

因此,该程序根据文本文件的内容移动文件,在这种情况下,它会检查txt文件是否有段(1-8)字符串。 但它一次只检查一个文件,我有 10,000 个文件名为 -

Myfile_1.txt,Myfile_2.txt,依此类推,直到Myfile_10000.txt。

好的,所以每个 txt 文件都包含

>KM368312.1 Influenza A virus 
(A/swine/Shandong/01/2009(H1N1)) segment 3 
polymerase PA (PA) and PA-X protein (PA-X) genes, 
complete cds 

您可以假设每个文件的第一行都是这样的,除了段部分的范围从段 1 到 段 8。

那么我如何修改它以读取所有文件并将其移动到目的地,在本例中为名为段 1 - 段 8 的文件夹?

我知道 linux 是执行此类操作的更好选择,我正在尝试尽快进行切换。

@ECHO OFF
SETLOCAL
SET "sourcedir=U:sourcedirt w o"
SET "destdir=U:destdir"
for /L %%e in (8,-1,1) do md "%sourcedir%segment %%e"
FOR /f "tokens=1,2,*delims=:" %%a IN (
'findstr /L /c:" segment " "%sourcedir%file*" '
) DO (
call :whatseg %%c
for /L %%e in (8,-1,1) do if errorlevel %%e echo move "%%a:%%b" "segment %%e"&move "%%a:%%b" "segment %%e"
)
GOTO :EOF
:whatseg
if "%~1"=="segment" goto foundseg
shift
goto whatseg
:foundseg 
exit /b%2

您需要更改sourcedir的设置以适合您的情况。该列表使用适合我的系统的设置。

我故意在名称中包含空格,以确保正确处理它们。

findstr命令在每个文件中查找文本segment,并生成格式列表fullfilename:linefound。由于完整文件名包含:for/f将驱动器号分配给%%a,将路径和文件名分配给%%b,将行文本分配给%%c

然后调用例程:whatseg,它只是shift每个令牌,直到找到segment,然后将errorlevel设置为以下参数并返回给调用方。

然后,for/L检查:whatseg例程返回errorlevel- 顺序相反,因为if errorlevel被解释为if errorlevel is n or greater。当%%e匹配errorlevel时,文件被移动,这将返回errorlevel0,因此只能有 1 个匹配。

最新更新