我对编写批处理文件的经验为零,但我的目标似乎并不困难。我正在尝试编写一个小脚本,提示用户输入 ID 号,然后搜索 .jpg 目录并将包含 ID 号的任何图片复制到单独的目录。 .jpg 是名称 xxxxxx_zzz.jpg,其中 xxxxxx 是最多 6 位的 ID 号,zzz 是序列号。比如一个ID可以有很多张图片:123456_001.jpg、123456_002.jpg、123456_003.jpg等。
我玩过几个 IF
和 GOTO
命令,但我似乎偏离了我的目标。我知道我目前在下面使用的两个 IF
语句是垃圾,但我将它们留在语法中以传达我认为我应该前进的方向。
我无法让 IF
语句使用 GOTO
命令。我也不认为我完全理解标签应该如何工作。
@ECHO OFF
CLS
:START
DEL /q C:\Users\ADMIN\Desktop\temp\*.*
:GETINPUT
set /p propkey=Enter the Property Key of pictures to retrieve.:
IF EXIST C:\Users\ADMIN\Desktop\photos\*%propkey%_???.jpg GOTO Success
IF "%propkey%"=="" ECHO No Property Key was entered. GOTO START
:Success
ECHO Pictures from Property Key %propkey% will now be moved to the Temp folder on the Desktop. && PAUSE
COPY "C:\Users\ADMIN\Desktop\photos\*%propkey%*.jpg" "C:\Users\ADMIN\Desktop\temp\"
START C:\Users\ADMIN\Desktop\temp\
:END
最佳答案
试试这个:
:Start
@echo off
cls
:: store source folder
set _sd=C:\Users\ADMIN\Desktop\photos
:: store target folder
set _td=C:\Users\ADMIN\Desktop\temp
:CheckFolders
if not exist %_sd% echo Source folder not found.&goto End
if not exist %_td% echo Target folder not found.&goto End
:: wipe target folder
del /q %_td%\*.*
:GetKey
set /p _key=Enter the property key:
if '%_key'=='' echo No property key entered. Please retry.&goto GetKey
if not exist "%_sd%\*%_key%*.jpg" echo No photos matched the key.&goto End
echo Copying pictures to %_td%...
copy "%_sd%\*%_key%*.jpg" "%_td%"
:OpenFolder
start "%windir%\explorer.exe" "%_td%"
:End
标签是一种在批处理文件中任意指定一行的方法。 GOTO
命令使用它来更改命令执行的通常从上到下的进程,指定接下来应该处理哪一行。您可能已经想到,将 IF
命令与 GOTO
结合使用可以进行条件处理,例如在满足值或遇到错误时。
标签的另一种用途是用于文档或清晰度。在我上面的示例中,GOTO
没有使用“CheckFolders”,但它让程序员提示该部分代码的作用。
关于batch-file - 如何正确使用 IF 和 GOTO 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531548/