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
语句,因为它们并不是真正需要的。
我一直在查看此网站上的许多帖子,看看我做错了什么,但我无法让这个简单的脚本工作。
该脚本存储在我的 %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
语句,因为它们并不是真正需要的。