首页 > 解决方案 > 无法使用批处理脚本将 tiff 图像排序到特定文件夹

问题描述

我目前正在尝试创建一个批处理脚本,这样我就可以通过根据用户输入将文件夹中的多个 tiff 图像移动到其他特定文件夹来对其进行排序。到目前为止我实现的是:1.可以循环浏览文件夹中的所有文件2.可以打开图像查看器查看tiff文件3.关闭图像查看器程序4.将tiff文件移动到特定文件夹

但是,当我尝试回显输入时,我不知道为什么我的 set /p 没有注册用户的输入值。

cmd 给了我“ECHO 已关闭”的消息。

感谢是否有人可以帮我解决这个问题。

非常感谢 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

标签: batch-file

解决方案


@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 blockthen 中更改,则除非delayed expansion生效,否则将使用原始值。如果delayed expansion有效,则%var%指原始值和!var!当前(运行时)值。

另请注意,set /p如果用户响应只是简单的,则不会更改变量的值Enter- 因此set "name="上述清除其值。当然,您可以省略该行,name如果您只需按 ,则将再次使用上次输入的值Enter

有很多关于 SO 的文章delayed expansion- 只需使用该search功能。


推荐阅读