我没有编写批处理文件的经验,但我的目标似乎并不困难。我正在尝试编写一个小脚本,提示用户输入ID号,然后搜索.jpgs目录,并将包含ID号的任何图片复制到一个单独的目录中。 .jpgs是名称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
答案 0 :(得分:1)
虽然外卡在if exist
中有效,但某些组合可能会失败。此外,如果路径可能包含空格,则必须将名称括在引号中。尝试:
IF EXIST "C:\Users\ADMIN\Desktop\photos\*%propkey%_*.jpg" GOTO Success
IF "%propkey%"=="" ECHO No Property Key was entered. & GOTO START
答案 1 :(得分:0)
试试这个:
: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”,但它允许程序员提示该部分代码的作用。
答案 2 :(得分:0)
你的代码非常接近。它需要一个goto :eof
来阻止它进入主程序。在缺少echo语句后,将&&
更改为&
并将&
更改为goto start
。我将 @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 GETINPUT
goto :EOF
: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
更改为下一个标签,以避免出现无害的错误消息。
{{1}}