Windows 10 个批处理文件 - 测试目录是否存在,复制文件,出错时发出蜂鸣声

Windows 10 batch file - test if directory exists, copy file, beep on error

我一直在查看此网站上的许多帖子,看看我做错了什么,但我无法让这个简单的脚本工作。

该脚本存储在我的 %MyDocuments%\IT\scripts\ 文件夹中,该文件夹位于我的 PATH 中。我 CD 到我想要 运行 脚本的文件夹,然后调用它并传递照片编号,即

r5 0893

如果文件夹.\Rejects 不存在,我需要创建它。然后它尝试将文件移动到 Rejects 子文件夹,如果复制失败,我想发出哔哔声,例如我输入了一个不存在的照片编号。

:: echo off
if exist Rejects 
(
    echo Rejects\ found, goto DirectoryExists
    goto DirectoryExists
)
else
(
    echo Creating Rejects\ folder
    mkdir Rejects 
)
:DirectoryExists
:: pause
echo if not exist 2X9A%1.jpg
if not exist 2X9A%1.jpg
(
    echo "File 2X9A%1.jpg not found!!!"
    rundll32 user32.dll,MessageBeep
)
Else
(
    echo move 2X9A%1.jpg To Rejects\
    move 2X9A%1.jpg Rejects\
)
:: pause

此外,这些命令在命令提示符下一次只能运行一个,但不能在批处理文件中运行! :

D:\Photos18.06. Leyla>r5 0489
The syntax of the command is incorrect.
D:\Photos18.06. Leyla>if exist Rejects
D:\Photos18.06. Leyla>if exist Rejects echo Yes
Yes

我做错了什么??

感谢您的帮助!

您的代码必须像这样修复:

@echo off

if exist Rejects (
    echo Rejects\ found, going to DirectoryExists
    goto DirectoryExists
) else (
    echo Creating Rejects\ folder
    mkdir Rejects 
)

:DirectoryExists
rem pause
echo if not exist 2X9A%1.jpg

if not exist 2X9A%1.jpg (
    echo "File 2X9A%1.jpg not found!"
    rundll32 user32.dll,MessageBeep
) else (
    echo move 2X9A%1.jpg To Rejects\
    move 2X9A%1.jpg Rejects\
)

pause

您似乎使用 low/medium 级别的语言进行编程。但是,这是批处理文件中 if 的默认语法。

cmd.exe 中键入 if /? 以了解有关其语法的更多信息。

我知道您已经接受了一个答案,它向您展示了如何使用 If / Else 语句,但我认为您真的应该考虑像这样重新安排脚本:

@Echo Off
If "%~1"=="" Exit /B
If Not Exist "2X9A%~1.jpg" (
    Echo "File 2X9A%~1.jpg not found!!!"
    Rundll32 User32.dll,MessageBeep
    Pause
    Exit /B
)
If Not Exist "Rejects\" (
    Echo Creating Rejects directory
    MD "Rejects" 2>Nul || Exit /B
)
Echo Moving 2X9A%1.jpg to Rejects directory
Move /Y "2X9A%1.jpg" "Rejects"
Pause

如果文件不存在,您不会创建可能丢失的目录; (如果当前目录不是您所期望的,这也会有所帮助)。我还添加了必要的尾部反斜杠,以确保存在检查是针对目录而不是名为 Rejects 的文件。您还会注意到我删除了 Else 语句,因为它们并不是真正需要的。