程序在遇到第二个FOR循环FOR /F %inputDir% %%F in (*.jpg) do
我正在Windows 10计算机上运行,正在移动和重命名图片
我已经尝试过插入断点和标志,但无济于事。我什至尝试过在FOR循环(FL)内仅加载一个虚拟负载(只是先进行回声然后暂停),因为我从某个地方获悉,该批处理一次执行了整个FL。我不尝试使用延迟扩展,但愿意学习如何。
@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%
)
预期结果: 第二次FL运行 打开图片 提示输入newName 清除屏幕 重新显示信息(文件路径和newName)并要求确认 调用WIP子例程(即使我没有调用子例程,FL也不起作用)
我看不到任何错误消息,因为该程序在我有机会看到任何错误之前已经退出。即使在第二个FOR循环之后具有暂停功能,我仍然无法冻结程序。我认为这与不正确的语法有关,因为FL加载失败而失败。
文件路径:
答案 0 :(得分:1)
for /f
不允许您在尝试执行操作时指定目录路径。如果要遍历目录(包括子文件夹),则需要for /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!
)