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

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

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

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

вопрос задан 12.11.2010
Bill
1706 репутация

9 ответов


  • 476 рейтинг

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

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

    ответ дан The Answerer, с репутацией 4785, 19.12.2013
  • 180 рейтинг
    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. архив. орг / веб / 20150609092521 / https: // поддержка. Microsoft. com / en-us / kb / 65994 )

    ответ дан Martin Schapendonk, с репутацией 8331, 12.11.2010
  • 46 рейтинг

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

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

    ответ дан Agent_9191, с репутацией 6355, 12.11.2010
  • 30 рейтинг
    mkdir C:\VTS 2> NUL
    

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

    или

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

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

    ответ дан 3years2late, с репутацией 301, 10.10.2013
  • 27 рейтинг
    set myDIR=LOG
    IF not exist %myDIR% (mkdir %myDIR%)
    
    ответ дан Robie, с репутацией 584, 16.04.2014
  • 12 рейтинг

    Я использую этот способ, вы должны поставить обратную косую черту в конце имени каталога , чтобы избежать того, что место существует в файле без расширения с тем же именем, что и указанный вами каталог, никогда не используйте "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
    
    ответ дан D3F4ULT, с репутацией 626, 19.12.2013
  • 11 рейтинг

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

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

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

    if not exist "C:\VTS\important.file" echo. > "C:\VTS\important.file"
    
    ответ дан ETHANWEEGEE, с репутацией 125, 10.05.2016
  • 0 рейтинг

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

    :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\"
    
    ответ дан Winston, с репутацией 1, 9.10.2013
  • -4 рейтинг

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

    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 не будет затронута.

    ответ дан CodyClark02, с репутацией 25, 22.03.2013