如何正确使用IF和GOTO语句

时间:2013-12-11 22:47:31

标签: batch-file if-statement goto

我没有编写批处理文件的经验,但我的目标似乎并不困难。我正在尝试编写一个小脚本,提示用户输入ID号,然后搜索.jpgs目录,并将包含ID号的任何图片复制到一个单独的目录中。 .jpgs是名称xxxxxx_zzz.jpg,其中xxxxxx是最多6位数的ID号,zzz是序列号。例如,一个ID可以有很多图片:123456_001.jpg,123456_002.jpg,123456_003.jpg等。

我玩了几个IFGOTO命令,但我似乎偏离了我的目标。我知道我目前使用的两个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

3 个答案:

答案 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}}