batch-file - 批处理脚本退出遇到 For 循环
问题描述
程序在遇到第二个 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 因虚拟负载而失败。
文件路径:
解决方案
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!
)
推荐阅读
- azure - 与客户端共享 Office 加载项
- debugging - 无法在 Blazor WASM 中命中断点
- php - 如何在laravel中的刀片模板上从当天减去天数?
- android - 如何创建/替换 Android.mk 文件以实例化 Notification.TvExtender()
- outlook - 在 Microsoft Teams [HOW] 中将状态设置为“专注”;MyAnalytics 焦点时间将状态设置为“忙碌”
- flutter - 使用 Flutter Downloader 插件,下载应用关闭后
- javascript - Vue.js - 数据属性不可访问
- keras - 移植预训练的 keras 模型并在 IPU 上运行它们
- c++ - 在单个进程中使用同一库的不同版本
- python - 我有一个模型的 .cfg 文件和它的 .weights 文件,如何在 keras 中加载这个模型