Пакетный файл Windows 10 - проверьте, существует ли каталог, скопируйте файл, подайте звуковой сигнал при ошибке - PullRequest
0 голосов
/ 10 февраля 2019

Я просматривал много постов на этом сайте, чтобы увидеть, что я делаю неправильно, но я не могу заставить этот простой скрипт работать.

Сценарий хранится в моей папке% MyDocuments% \ IT \ scripts \, которая находится в моей переменной PATH.Я отправляю CD в папку, из которой хочу запустить скрипт, затем вызываю его и передаю номер фотографии, т.е.

r5 0893

Если папка. \ 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:\Photos\2018\1.06. Leyla>r5 0489
The syntax of the command is incorrect.
D:\Photos\2018\1.06. Leyla>if exist Rejects
D:\Photos\2018\1.06. Leyla>if exist Rejects echo Yes
Yes

Что я делаю не так ??

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Я знаю, что вы приняли ответ, который показывает вам, как использовать оператор 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, потому что они действительно не были нужны.

0 голосов
/ 10 февраля 2019

Ваш код должен быть исправлен следующим образом:

@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

Вы, кажется, программируете на языках низкого / среднего уровня.Однако это синтаксис по умолчанию для if в пакетном файле.

Введите if /? в cmd.exe, чтобы узнать больше о его синтаксисе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...