Пакетный файл Windows 10 - ЕСЛИ Использование - PullRequest
0 голосов
/ 02 декабря 2018

У меня есть простой командный файл, содержащий одну строку:

if not exist "C:\users\fred\desktop\b\" ( md "C:\users\fred\desktop\b" ) &&copy /Y "C:\users\fred\desktop\b.txt" "C:\users\fred\desktop\b\"

Вы можете увидеть намерение - если на рабочем столе не существует определенной папки, создайте ее.Независимо от того, существовала ли папка, скопируйте конкретный файл в эту папку.

Обратите внимание, что в одной строке две команды - условная IF и команда копирования с использованием оператора "&&".

Но когда я запускаю его, он всегда работает, только если папка не существует.Затем он создает папку и копирует в нее файл.Если папка уже существует, она ничего не делает.Как будто он думает, что все находится в состоянии IF, независимо от '(' и ')' вокруг создания папки.

Я бы поклялся, что это работало на более ранних версиях Windows ... но яможет быть не так.

FWIW, Windows 10 32 бит.

Ответы [ 3 ]

0 голосов
/ 02 декабря 2018

Часть then команды if продолжается до конца строки и может включать несколько команд, разделенных &, && или ||.Так было со времен Windows NT, когда впервые было введено cmd.exe.

Чтобы ограничить тогдашнюю часть и сохранить скрипт в одной строке, вы можете поместить if в скобкикоманда:

( if not exist "C:\users\fred\desktop\b\" md "C:\users\fred\desktop\b" ) & copy /y "C:\users\fred\desktop\b.txt" "C:\users\fred\desktop\b\"
  • ( if not exist "directory" md "directory" )

    Поместив if в составную команду в скобках, мы гарантируем, что тогдашняя часть не продолжается до концалинии

  • &

    Разделитель команд.

  • copy /y "file" "directory"

    Выполняется независимосостояния выхода предыдущей команды.

0 голосов
/ 02 декабря 2018

Как предлагается в комментариях CatCat, как насчет использования XCopy вместо?

С обратной косой чертой в месте назначения, он будет создан, если он еще не существует.

Пример:

Xcopy "%UserProfile%\Desktop\b.txt" "%UserProfile%\Desktop\b\" /H /K /Q /R /Y

При необходимости можно настроить параметры, введите XCopy /? для информации об использовании.

0 голосов
/ 02 декабря 2018

Код, который вы публикуете, также не работал в предыдущих версиях Windows.

Как написано, ваш код говорит , если эта папка не существует, создайте каталог и скопируйте файл .Если каталог существует, он никогда не попадет в копию файла .

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

if not exist "C:\users\fred\desktop\b\" md "C:\users\fred\desktop\b" 
copy /Y "C:\users\fred\desktop\b.txt" "C:\users\fred\desktop\b\"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...