Создать папку с пакетом, но только если она еще не существует - PullRequest
389 голосов
/ 12 ноября 2010

Кто-нибудь может сказать мне, как сделать следующее в пакетном скрипте Windows?(*.bat):

  • Создать папку, только если она еще не существует

Более подробно, я хочу создать папку с именем VTS вдиск C:\, но только если эта папка еще не существует.Я не хочу перезаписывать содержимое папки, если она уже существует и пакет выполнен.

Ответы [ 9 ]

545 голосов
/ 19 декабря 2013

Вы просто используете это: if not exist "C:\VTS\" mkdir C:\VTS это создаст каталог, только если папка не существует.

Обратите внимание, что этот тест на существование вернет true, только если VTS существует и является каталогом. Если его нет или он есть в виде файла, команда mkdir будет запущена и должна вызвать ошибку. Возможно, вы захотите проверить, существует ли VTS в виде файла.

197 голосов
/ 12 ноября 2010
if exist C:\VTS\NUL echo "Folder already exists"

if not exist C:\VTS\NUL echo "Folder does not exist"

См. Также https://support.microsoft.com/en-us/kb/65994

(Обновление от 7 марта 2018 года; статья Microsoft недоступна, архив https://web.archive.org/web/20150609092521/https://support.microsoft.com/en-us/kb/65994)

50 голосов
/ 12 ноября 2010

Просто позвоните mkdir C:\VTS несмотря ни на что. Он просто сообщит, что подкаталог уже существует.

Редактировать: Как уже отмечали другие, это устанавливает% ERRORLEVEL%, если папка уже существует. Если ваш пакет (или любой вызывающий его процесс) не заботится об уровне ошибок, этот метод работает хорошо. Поскольку в вопросе не упоминалось о том, как избежать уровня ошибок, этот ответ является совершенно верным. Он удовлетворяет потребности создания папки, если она не существует, и не перезаписывает содержимое существующей папки. В противном случае следуйте ответу Мартина Шапендонка .

35 голосов
/ 10 октября 2013
mkdir C:\VTS 2> NUL

создайте папку с именем VTS и выведите A subdirectory or file TEST already exists в NUL.

или

(C:&(mkdir "C:\VTS" 2> NUL))&

измените букву диска на C:, mkdir, выведите ошибку в NUL и выполните следующую команду.

29 голосов
/ 17 апреля 2014
set myDIR=LOG
IF not exist %myDIR% (mkdir %myDIR%)
16 голосов
/ 19 декабря 2013

Я использую этот способ, вы должны поставить обратную косую черту в конце имени каталога , чтобы избежать того, что место существует в файле без расширения с тем же именем, что и указанный вами каталог, никогда не используйте "C: \ VTS" , поскольку существует файл с именем "VTS" , сохраненный в разделе "C:" , правильный способ - использовать "C: \ VTS \" , проверьте обратную косую черту после VTS , так что это правильный путь.

@echo off
@break off
@title Create folder with batch but only if it doesn't already exist - D3F4ULT
@color 0a
@cls

setlocal EnableDelayedExpansion

if not exist "C:\VTS\" (
  mkdir "C:\VTS\"
  if "!errorlevel!" EQU "0" (
    echo Folder created successfully
  ) else (
    echo Error while creating folder
  )
) else (
  echo Folder already exists
)

pause
exit
15 голосов
/ 10 мая 2016

Вы можете использовать:

if not exist "C:\VTS\" mkdir "C:\VTS"

Вы также можете расширить код, чтобы заменить любые отсутствующие ожидаемые файлы.

if not exist "C:\VTS\important.file" echo. > "C:\VTS\important.file"
0 голосов
/ 09 октября 2013

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

:CREATES A CHECK VARIABLE

set lookup=0

:CHECKS IF THE FOLDER ALREADY EXIST"

IF EXIST "%UserProfile%\AppData\Local\CounterPath\RegNow Enhanced\default_user\" (set lookup=1)

:IF CHECK is still 0 which means does not exist. It creates the folder

IF %lookup%==0 START "" mkdir "%UserProfile%\AppData\Local\CounterPath\RegNow Enhanced\default_user\"
0 голосов
/ 22 марта 2013

Попробуйте это

ROBOCOPY C:\Users\ADMIN\Pictures c:%date:~4,2%%date:~7,2%%date:~10,4% /MOV

Этот пакет создаст новую папку и установит ее имя в качестве текущей даты. (03222013) Затем он переместит любые файлы из папки C:\Users\ADMIN\Pictures в эту вновь созданную папку.

Если сегодня 22 марта 2013 года .... Все файлы в C:\Users\ADMIN\Pictures будут перемещены в папку с именем 03222013.

Будут перемещены только файлы в C:\Users\ADMIN\Pictures. Любая папка в C:\Users\ADMIN\Pictures не будет затронута.

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