批处理脚本在 IF DO 循环中检查文件中的字符串

Batch Script check a file for a string in a IF DO loop

新来的,希望这是一个简单的问题。我在编程和脚本编写方面的背景很少,但到目前为止我已经掌握了基础知识并且我被卡住了。

我试图用标记为我需要帮助的部分完成的逻辑;

  1. 扫描我的网络摄像头文件夹寻找最大的文件
  2. 需要帮助根据已处理文件列表检查该文件
  3. 将该文件移动到具有良好 CPU 和 SSD
  4. 的 PC 上的临时工作目录
  5. 运行 对其进行 HandBrake 压缩
  6. 将完成的文件移回其原始位置
  7. 从临时工作目录中删除原始文件
  8. 将其文件名写入Processed.txt
  9. 需要帮助 将整个事情循环到 运行 无休止

现在,扫描并找到最大的文件并将其发送以进行处理并将其移回时,它运行良好。我想添加的是在大小扫描期间检查 Processed.txt 文件,因为通常最大的文件即使在压缩后仍然最终是最大的(因此它卡在同一个文件上)。基本上我希望能够无休止地扫描最大的未处理文件并将它们一个一个地压缩。 (我有数千个,所以典型的批处理不会真正起作用)

我试图弄清楚如何让 findstr 进入 for\do 循环,但我完全迷失了。我的想法是获取当前的 %name% 变量,运行 它通过 Processed.txt 文件上的 findstr,如果匹配则继续,如果不匹配则将其设为当前最大的文件。

这是我到目前为止所做的工作,是我从其他帖子中拼凑出来的;

SETLOCAL EnableDelayedExpansion
set tes=0
set name=
set path=

for /r D:\Cameras %%h in (*.*) do (
IF !tes! LSS %%~zh (
SET tes=%%~zh
SET name=%%~nh
SET path=%%~ph
SET ext=%%~xh
)
)

move "d:%path%%name%%ext%" "d:\Working\"

HandBrakeCLI -i "d:\Working\%name%%ext%" -o "c:\Completed\%name%.mp4" -O -e x264 -q 23 -B 128 -w 720 -l 480 --auto-anamorphic

move "c:\Completed\%name%.mp4" "d:%path%%name%.mp4"
del "d:\Working\%name%%ext%"
echo !name! >> Processed.txt

在此先致谢,非常感谢您提供的所有帮助。

*****编辑更新***** 所以我无法让下面的工作,但它给了我一个新的方向。现在下面似乎非常接近工作,但第二个 FOR DO IF 似乎在主循环之外处理。也许有人可以帮助解决这个问题,因为我认为这是对我有用的逻辑。

我删除了我所知道的正在工作的东西,只是为了测试它是否会扫描,输入文件名,然后在下次测试时跳过它。

rem :start
SETLOCAL EnableDelayedExpansion
set tes=0
set name=
set path=
set found=false

for /r d:\Cameras %%h in (*.*) do ( 
rem CALL :checkprocessed %%h
for /f %%x in (d:\Processed.txt) do (
IF "%%~nh" NEQ "%%~x" IF !tes! LSS %%~zh (
echo !tes! %%~zh %found% >> ifcheck.txt 
SET tes=%%~zh
SET name=%%~nh
SET path=%%~ph
SET ext=%%~xh
)
)
)

rem move "d:%path%%name%%ext%" "d:\Working\"
rem HandBrakeCLI -i "d:\Working\%name%%ext%" -o "c:\Completed\%name%.mp4" -O -e x264 -q 23 -B 128 -w 720 -l 480 --auto-anamorphic
rem move "c:\Completed\%name%.mp4" "d:%path%%name%.mp4"
rem del "d:\Working\%name%%ext%"
echo !name! >> Processed.txt
rem goto :start


rem :checkprocessed
rem SET found=false
rem for /f %%x in (d:\Processed.txt) do IF "%%~nh" EQU "%%~x" (SET found=true & echo !found! >> found.txt & exit /b 0)
rem exit /b 0

首先,我要感谢@jwdonahue 在这方面提供的所有帮助和时间。来回思考想法,我能够让脚本完美运行!如果有人需要,下面是工作脚本。我也从其他用户的评论中修复了路径。感谢大家的帮助!

:start
SETLOCAL EnableDelayedExpansion
set tes=0
set name=
set _path=
set ext=
set _found=false

for /r d:\Cameras %%h in (*.*) do (
for /f %%x in (d:\Processed.txt) do ( IF "%%~nh" EQU "%%~x" ( set _found=true) )
IF !_found! EQU false IF !tes! LSS %%~zh (
SET tes=%%~zh
SET name=%%~nh
SET _path=%%~ph
SET ext=%%~xh
)
set _found=false
)


move "d:%_path%%name%%ext%" "d:\Working\"
HandBrakeCLI -i "d:\Working\%name%%ext%" -o "c:\Completed\%name%.mp4" -O -e x264 -q 23 -B 128 -w 720 -l 480 --auto-anamorphic
move "c:\Completed\%name%.mp4" "d:%_path%%name%.mp4"
echo !name! >> Processed.txt
echo !_path!,!name!!ext!,!tes! >> OrgSize.log
del "d:\Working\%name%%ext%"
goto :start