如何在文件中搜索字符串?

时间:2018-04-27 02:12:04

标签: batch-file

我正在编写批处理文件来读取文件夹中的所有文件。

以下是我的代码:

@echo off
setlocal EnableDelayedExpansion 
for %%I in (C:\test\*.print_job.*) do (
   Set Name=%%~nxI
   echo !Name!
)
pause

我能够获取所有.print_job文件,但现在我想读取所有文件并查找特定标识符。

  • 如果文件包含“MOUNT”,则将该文件移至C:\ Folder1
  • 如果文件包含“PROD”,则应将文件移至 C:\ FOLDER2
  • 如果文件包含“SPI”,则文件应该移动到 C:\ Folder3

提前致谢

2 个答案:

答案 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 来结束脚本,因为它处于连续循环中。

如果您可以使用任务计划程序,那么可以使用。