ЕСЛИ СУЩЕСТВУЕТ
cmd имеет встроенный IF EXIST
, который проверяет, существует ли файл, и аналоговый IF NOT EXIST
. (См. IF /?
или ss64.com ). Что-то подобное сделает то, что вы описываете.
IF NOT EXIST "%TARGET_FILE%" COPY "%SOURCE_FILE%" "%TARGET_FILE%"
Анализ файла / пути
cmd имеет некоторые средства синтаксического анализа путей, однако все полезные функции содержатся в команде FOR
(см. FOR /?
или ss64.com ).
Обычно я начинаю с типичной переменной среды, например, %SOURCE_FILE%
, передайте его FOR
и разрешите поведению подстановки FOR
получить родительский каталог, имя файла, расширение и т. Д.
Предположим, вам нужно базовое имя файла (без директории). Вы можете сделать это следующим образом:
FOR /F "tokens=*" %%f IN ("%SOURCE_FILE%") DO SET "SOURCE_FILE_BASE=%%~ff"
Теперь SOURCE_FILE_BASE
будет содержать базовое имя файла. (Примечание: синтаксис FOR
изменяется при его использовании в сценарии по сравнению с интерактивной оболочкой. Использование %%
- это то, что нужно сценарию.)
Комбинированное
Исходя из того, что вы описываете, предположим, что у вас есть путь к файлу, сохраненному в SOURCE_FILE
, и каталог, в который вы хотите скопировать файл, TARGET_DIR
, вы можете выполнить то, что вы описываете, выполнив что-то вроде:
FOR /F "tokens=*" %%f IN ("%SOURCE_FILE%") DO SET "SOURCE_FILE_BASE=%%~ff"
SET "TARGET_FILE=%TARGET_DIR%\%SOURCE_FILE_BASE%"
IF NOT EXIST "%TARGET_FILE%" COPY "%SOURCE_FILE%" "%TARGET_FILE%"