Batch file 批处理脚本从遇到循环退出

Batch file 批处理脚本从遇到循环退出,batch-file,Batch File,当程序在*.jpg do中的/F%inputDir%%%F命中第二个FOR循环时,它将立即退出而不发出警告 我在Windows10机器上运行,移动和重命名图片 我已经试着在突破点和旗帜,但没有任何效果。我甚至尝试过让一个虚拟加载只是一个回音,然后在FOR循环FL中暂停,因为我从某个地方了解到批处理一次执行整个FLs。我没有尝试过使用延迟扩展,但愿意学习如何使用 @echo off echo LOADING CONFIG cd "Batch stuff" FOR /F "tokens=1,2 de

当程序在*.jpg do中的/F%inputDir%%%F命中第二个FOR循环时,它将立即退出而不发出警告

我在Windows10机器上运行,移动和重命名图片

我已经试着在突破点和旗帜,但没有任何效果。我甚至尝试过让一个虚拟加载只是一个回音,然后在FOR循环FL中暂停,因为我从某个地方了解到批处理一次执行整个FLs。我没有尝试过使用延迟扩展,但愿意学习如何使用

@echo off
echo LOADING CONFIG
cd "Batch stuff"
FOR /F "tokens=1,2 delims=&" %%A in (config.txt) do (
REM echo %%A
REM echo %%B
SET inputDir=%%A
SET outputDir=%%B
)
echo inputDirectory: %inputDir%
echo outputDirectory: %outputDir%

echo CONFIG LOADED
echo Continue?
pause





FOR /F %inputDir% %%F in (*.jpg) do (
echo here
pause
cls
echo openning: %%F
echo newName: 
SET /P newName=Enter a new name for this image: 
cls 
echo openning: %%F
echo newName: %newName%

echo Hit space to continue or exit the program (manually)
pause
REM CALL nameAndMove %%F %newName%


)
预期成果: 第二层 打开图片 提示输入新名称 清除屏幕 重新显示信息文件路径和新名称,并请求确认 即使我没有调用子例程,对WIP子例程FL的调用也不起作用

我无法看到任何错误消息,因为程序在我有机会看到任何错误消息之前退出。即使在第二个FOR循环后使用pause函数,我仍然无法使程序冻结。我认为这与错误的语法有关,因为FL在虚拟加载时失败

文件路径:

for/f不允许您在尝试时指定目录路径。如果要循环浏览包含子文件夹的目录,则需要使用/r,如下所示:

for /r "%inputDir%" %%A in (*.jpg) do (
    echo %%~nxA
)
如果要在每次循环迭代时使用参数,即如果要更改每个.jpg的名称,则需要使用延迟扩展。我的首选方法是将参数指定为变量,然后在延迟扩展期间使用该变量时只需使用感叹号:

setlocal enabledelayedexpansion
for /r "%inputDir%" %%A in (*.jpg) do (
    set "jpg=%%~nxA"
    echo I need to change the name of !jpg!
)

非常感谢。我忘了/F不喜欢目录,至于重命名部分。我将把路径和新名称传递给一个子例程,该子例程也会移动该图像现在我想起来了,在第二个FL中重命名图像,然后同时移动它们听起来更好这没问题-是的,在循环中完成任务通常比用参数调用子例程更容易编写和更干净。祝你好运