我当前正在尝试创建一个批处理脚本,以便可以根据用户输入将一个文件夹中的多个tiff图像移动到其他特定的文件夹中,从而对它们进行排序。到目前为止,我取得了以下成就: 1.可以循环浏览文件夹中的所有文件 2.可以打开图片查看器查看tiff文件 3.关闭图像查看器程序 4.将tiff文件移到特定文件夹
但是,当我尝试回显输入时,我不知道为什么我的set / p没有注册用户的输入值。
cmd给了我“ ECHO is off”消息。
感谢是否有人可以帮我解决这个问题。
非常感谢 G
@ECHO OFF
cd "C:\img\"
FOR /R %%f IN (*.tif) DO (
echo Current file is: %%f
start "" "C:\Program Files (x86)\Common Files\Global 360\Imaging\kodakprv.EXE" %%f
set /p name= Action:
IF "%name%" == "1" GOTO ONE
IF "%name%" == "2" GOTO TWO
IF "%name%" == "3" GOTO THREE
ECHO %name%
echo None of the above, BYE!
GOTO END
:ONE
echo "I pressed 1"
taskkill /IM kodakprv.EXE
move %%f "C:\img\1"
cls
:TWO
echo "I pressed 2"
taskkill /IM kodakprv.EXE
move %%f "C:\img\2"
cls
:THREE
echo "I pressed 3"
taskkill /IM kodakprv.EXE
move %%f "C:\img\3"
cls
)
:END
答案 0 :(得分:1)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
cd "C:\img\"
FOR /R %%f IN (*.tif) DO (
echo Current file is: %%f
start "" "C:\Program Files (x86)\Common Files\Global 360\Imaging\kodakprv.EXE" %%f
SET "name="
set /p name= Action:
for %%v in (1 2 3) do IF "!name!" == "%%v" (
set "validaction=Y"
echo "I pressed %%v"
taskkill /IM kodakprv.EXE
move %%f "C:\img\%%v"
pause
cls
)
if not defined validaction (
ECHO !name!
echo None of the above, BYE!
GOTO END
)
)
:END
一些小问题。
首先,您不能在code block
(带括号的命令系列)中使用标签,其次才能使用旧的收藏夹delayedexpansion
-如果变量在code block
中被更改,则除非delayed expansion
有效,将使用原始值。如果delayed expansion
有效,则%var%
引用原始值,!var!
引用当前(运行时)值。
还请注意,如果用户响应只是 Enter --因此上面的set /p
清除其值,则set "name="
不会更改变量的值。当然,您可以省略该行,并且只要按 Enter ,就会再次使用name
的最后输入值。
有很多关于delayed expansion
的文章-只需使用search
功能即可。