我正在编写批处理文件来读取文件夹中的所有文件。
以下是我的代码:
@echo off
setlocal EnableDelayedExpansion
for %%I in (C:\test\*.print_job.*) do (
Set Name=%%~nxI
echo !Name!
)
pause
我能够获取所有.print_job文件,但现在我想读取所有文件并查找特定标识符。
提前致谢
答案 0 :(得分:1)
如果删除了搜索词的文件名不同,那么它就在那里。
@echo off
for %%I in (C:\test\*) do Call :Sub "%%I"
Pause
Goto :Eof
:Sub
Set "Name=%~nx1"
if "%Name%" neq "%Name:MOUNT=%" (move "%~1" "C:\Folder1\" & Goto :Eof)
if "%Name%" neq "%Name:PROD=%" (move "%~1" "C:\Folder2\" & Goto :Eof)
if "%Name%" neq "%Name:SPI=%" (move "%~1" "C:\Folder3\" & Goto :Eof)
答案 1 :(得分:1)
@echo off
rem string target destination
call :movefiles "MOUNT" "C:\test\*.print_job.*" "C:\Folder1"
call :movefiles "PROD" "C:\test\*.print_job.*" "C:\Folder2"
call :movefiles "SPI" "C:\test\*.print_job.*" "C:\Folder3"
goto :eof
:movefiles
if not exist "%~3" md "%~3"
for /f "delims=" %%A in ('2^>nul findstr /l /m /c:"%~1" "%~2"') do (
move "%%~A" "%~3"
)
goto :eof
使用call :movefiles
来处理3个字符串中的每一个
在目标文件中搜索。
调用语法:call :movefiles <string> <target> <destination>
使目标目录不存在。如果找到字符串 在目标文件中,该文件将被移动到目标中 文件夹中。
使用的findstr
参数是:
/l
按字面意思使用搜索字符串。/m
如果文件包含匹配项,则仅打印文件名。/c:string
使用指定的字符串作为文字搜索字符串。如果您愿意,可以在rd "%~3"
循环后插入for
删除空的目标文件夹。
每2秒循环一次:
@echo off
:main
rem string target destination
call :movefiles "MOUNT" "C:\test\*.print_job.*" "C:\Folder1"
call :movefiles "PROD" "C:\test\*.print_job.*" "C:\Folder2"
call :movefiles "SPI" "C:\test\*.print_job.*" "C:\Folder3"
timeout /t 2 /nobreak >nul
goto :main
:movefiles
if not exist "%~3" md "%~3"
for /f "delims=" %%A in ('2^>nul findstr /l /m /c:"%~1" "%~2"') do (
echo move "%%~A" "%~3"
)
goto :eof
您可能需要使用 Ctrl + C 来结束脚本,因为它处于连续循环中。
如果您可以使用任务计划程序,那么可以使用。