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

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

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

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


Просто используйте это: , если не существует "C: VTS " mkdir C: VTS , он создаст каталог, только если папка не существует.

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

5


  если существует C:  VTS  NUL echo "Папка уже существует", если не существует C:  VTS  NUL echo "Папка не существует"  

См. также 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)

11


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

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

8


  mkdir C:  VTS 2> NUL  

создать папку с именем VTS и вывести Подкаталог или файл TEST уже существует на NUL .

или

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

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

1


  установить myDIR = LOGIF не существует% myDIR% (mkdir% myDIR%)  

1


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

  @echo off @ break off @ title Создать папку с пакетом, но только если она еще не существует - D3F4ULT @ color 0a @ clssetlocal EnableDelayedExp  ansionif не существует "C:  VTS " (mkdir "C:  VTS " if "! errorlevel!" EQU "0" (эхо-папка создана успешно) else (эхо-ошибка при создании папки)) else (эхо-папка уже существует  ) pauseexit  

1


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

  если не существует "C:  VTS " mkdir "C:  VTS"  

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

  если не существует "C:  VTS  important.file" echo.  > "C:  VTS  important.file"  


Это должно сработать для вас:

  ЕСЛИ НЕ СУЩЕСТВУЕТ " path  to  your  folder" md  path  to  your  folder  

Однако есть другой метод, но он может быть не на 100% полезным:

  md  path  to  your  folder> NUL 2>  NUL  

Создает папку, но не показывает вывод ошибки, если папка существует. Я настоятельно рекомендую вам использовать первый. Второй — если у вас проблемы с другим.


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

 : СОЗДАЕТ ПРОВЕРКУ ПЕРЕМЕННОЙ set lookup = 0: ПРОВЕРЯЕТ, ЕСЛИ ПАПКА УЖЕ СУЩЕСТВУЕТ "ЕСЛИ СУЩЕСТВУЕТ"% UserProfile%   AppData  Local  CounterPath  RegNow Enhanced  default_user  "(установить поиск = 1): IF CHECK по-прежнему равен 0, что означает, что не существует. Он создает папку IF% lookup% == 0 START "" mkdir "% UserProfile%  AppData  Local  CounterPath  RegNow Enhanced  default_user "  



Создать папку без использования cmd.exe в Windows [закрыто]

РЕДАКТИРОВАТЬ: У меня есть проприетарное приложение, которое поддерживает только выполнение команд и исполняемых файлов Windows (только из папки Windows) с параметрами, и мне нужно создать папку, используя это, но я не хочу, чтобы окно cmd мигало. Это приложение не поддерживает импорт DLL или настройку кода.

Есть ли способ создать папку в Windows без командной строки? Когда я запускаю

  cmd/C mkdir "C:  Path  To  Dir"  

, он вызывает мигание быстрого отображения и скрытие окна cmd (я хочу избежать этого). Когда я запускаю

  rundll.exe shell32.dll, SHCreateDirectory "C:  Path  To  Dir"  

или

  rundll.exe kernel32.dll, CreateDirectoryA "C:  Path  To  Dir"  

Команда проходит нормально, но не создает каталог, который я хотел создать. Было бы хорошо иметь такую ​​команду также для создания директивы с полным несуществующим путем.

EDIT2: Я нашел немного неприятный, но рабочий способ решения этой проблемы: я обнаружил, что могу создавать текстовые файлы используя это проприетарное приложение. Итак, сначала я создал файл: run.vbs, а затем написал в нем несколько строк:

  Если WScript.Arguments.Count> = 1 Тогда ReDim arr (WScript.Arguments.Count  -1) Для i = 0 В WScript.Arguments.Count-1 Arg = WScript.Arguments (i) Если InStr (Arg, "")> 0, то Arg = "" "" & Arg & "" "" arr (i  ) = Arg Далее RunCmd = Join (arr) CreateObject ("Wscript.Shell"). Запустить RunCmd, 0, TrueEnd If  

, затем запустить

   wscript run.vbs cmd/C mkdir "C:  Temp  TmP"  

И vuola!


Если вы не можете управлять тем, как создается ваш процесс, вы, по сути, зависите от разработчиков этого кода. Winapi CreateProcess запускает файлы * .bat и/или * .cmd, но через% ComSpec%/c, обычно это cmd.exe/c. Но тогда файлы .bat здесь не подходят именно потому, что их запускает cmd, который открывает консоль

Вот несколько вариантов, которые могут или не могут работать в вашем случае:

Вариант 1 (идея от @HarryJohnston)

Используйте следующую команду powershell

  powershell -WindowStyle Minimized -NoLogo -NoProfile -NonInteractive  -Command mkdir c:  your  path  tocreate>% temp%  scratch.txt  

Вариант 2

Пусть интерпретатор сценария выполнит следующее file:

  Dim oFSOSet oFSO = CreateObject ("Scripting.FileSystemObject") 'Создайте новый FolderoFSO.CreateFolder WScript.Arguments. Элемент (0)  

, который вы запускаете следующей командой:

  wscript mkdirsil.vbs "c:  path  to   create "//NoLogo  

//Отображение логотипа Nologo Prevent: во время выполнения баннер не будет отображаться

Вариант 3

Скомпилируйте следующую программу Winforms на C #, которая скрывает свое главное окно. Вам нужно развернуть исполняемый файл, и я не знаю, возможно ли это.

  using System; using System.Windows.Forms; using System.IO; пространство имен SilentMkDir {public  класс Программа: Форма {общедоступная программа (строковый каталог) {this.SuspendLayout ();  this.ClientSize = новый System.Drawing.Size (0, 0);  this.ControlBox = false;  this.MaximizeBox = false;  this.MinimizeBox = false;  this.ShowIcon = false;  this.ShowInTaskbar = false;  this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;  this.Text = "MakeDir";  this.WindowState = System.Windows.Forms.FormWindowState.Minimized;  this.Load + = (s, e) => {попробуйте {Directory.CreateDirectory (dir);  } catch (исключение все) {MessageBox.Show (all.Message);  } this.Close ();  };  this.ResumeLayout (ложь);  }//////Основная точка входа для приложения. /// [STAThread] static void Main (строка [] путь) {Application.EnableVisualStyles ();  Application.SetCompatibleTextRenderingDefault (ложь);  Application.Run (новая программа (путь [0]));  }}}  

Эта командная строка должна создать для вас файл * .exe, при условии, что приведенный выше код находится в mksil.cs

  csc mksil.cs/r:System.IO.dll/r:System.Windows.dll

Или вы можете создать что-то подобное на C/ C ++.

Вариант 4 (идея @eryksun)

С установленным Python вы можете сделать

  pyw -c  "import os; os.mkdir (r'C:  Path  To  Dir ')"  

, поскольку pyw.exe — это приложение с графическим интерфейсом

Вы в основном ищете исполняемый файл, представляющий собой приложение с графическим интерфейсом Windows, а не консольное приложение. Следующая пакетная команда сканирует системную папку на наличие таких исполняемых файлов (помещает их в одну строку), но ничего не найдено. (обратите внимание, что это нужно запускать из командной строки, из файла сценария используйте %% a вместо% a. dumpbin поставляется с компилятором VC ++

  для% a в (% SystemRoot%  System32  *. exe) do @ (dumpbin/headers% a | find "subsystem (Windows GUI)"> nul && echo% ~ nxa)  

Вариант невозможен

Первоначально я надеялся, что start может работать, но @HarryJohnston указал, что это внутренняя команда cmd, а не exe.

  start/B/min cmd/c mkdir  

Запускает отдельное окно для запуска указанной программы или команда.

, но с/B (без нового окна) и/MIN (свернуто) вам может сойти с рук.

9

Оцените статью
clickpad.ru
Добавить комментарий