有人可以告訴我如何在Windows批處理腳本中執行以下操作嗎? (*.bat
):使用批處理創建文件夾,但前提是文件夾不存在
- 創建一個文件夾,只有當它不存在
更詳細,我想創建一個在C:\
驅動器上名爲VTS
文件夾,但只有在該文件夾沒有按已經不存在了。如果文件夾已經存在並且批處理被執行,我不想覆蓋該文件夾的內容。
有人可以告訴我如何在Windows批處理腳本中執行以下操作嗎? (*.bat
):使用批處理創建文件夾,但前提是文件夾不存在
更詳細,我想創建一個在C:\
驅動器上名爲VTS
文件夾,但只有在該文件夾沒有按已經不存在了。如果文件夾已經存在並且批處理被執行,我不想覆蓋該文件夾的內容。
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
見(更新2018年3月7日,微軟的文章已關閉,封存與https://web.archive.org/web/20150609092521/https://support.microsoft.com/en-us/kb/65994)
只需撥打mkdir C:\VTS
不管。它只會報告該子目錄已經存在。
編輯:正如其他人已經指出,如果文件夾已經存在,這會設置%ERRORLEVEL%。如果您的批處理(或任何調用它的進程)不關心錯誤級別,則此方法可以很好地工作。由於這個問題沒有提到避免錯誤級別,所以這個答案是完全有效的。如果文件夾不存在,它將滿足創建文件夾的需要,並且不會覆蓋現有文件夾的內容。否則,請按照Martin Schapendonk's answer。
試試這個
ROBOCOPY C:\Users\ADMIN\Pictures c:%date:~4,2%%date:~7,2%%date:~10,4% /MOV
這批將使新的文件夾並將其名稱爲當前日期。 (03222013) 然後它會將C:\Users\ADMIN\Pictures
文件夾中的任何文件移動到新創建的文件夾中。
如果今天是2013年3月22日.... C:\Users\ADMIN\Pictures
中的所有文件都將被移至名爲03222013
的文件夾中。
只有C:\Users\ADMIN\Pictures
中的文件纔會被移動。 C:\Users\ADMIN\Pictures
中的任何文件夾都不會被觸碰。
這是如何回答這個問題的? – 2016-02-09 16:00:25
我爲我的腳本創建了這個用於我的工作eyebeam。
: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\"
mkdir C:\VTS 2> NUL
創建一個名爲VTS
和輸出A subdirectory or file TEST already exists
到NUL
文件夾。
或
(C:&(mkdir "C:\VTS" 2> NUL))&
變化的驅動器號到C:
,mkdir
,輸出誤差NUL
並運行的下一個命令。
漂亮乾淨的單線式 – kaptan 2013-10-10 18:40:40
你只是使用這個:if not exist "C:\VTS\" mkdir C:\VTS
它只會在文件夾不存在的情況下創建一個目錄。
請注意,只有存在VTS並且是目錄時,此存在測試纔會返回true。如果它不存在,或者作爲文件存在,則mkdir命令將運行,並應導致錯誤。您可能需要檢查VTS是否作爲文件存在。
我用這種方式,你應該放一個反斜槓的目錄名稱結束,以避免發生在一個文件中存在沒有擴展名具有相同名稱爲您指定的目錄中,從不使用「C:\ VTS‘保存在‘C VTS」,因爲它可以將文件名爲存在’:’分區,正確的方法是用‘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
你的解決方案特別有趣的是你使用'!errorlevel!',即延遲擴展。否則,變量ERRORLEVEL將在輸入第一個if之前被解析(即在解析時間)。現在它在執行時被解析,所以它可以捕獲'mkdir'的結果。你也是正確的,即使你測試了存在,你仍然應該測試成功(例如:訪問被拒絕的錯誤,例如)。與其他人相比,非常好的解決方案,+ 10! – Abel 2017-09-28 01:41:15
set myDIR=LOG
IF not exist %myDIR% (mkdir %myDIR%)
正如其他人指出的那樣,您可能在最高評分答案中看到過,如果您有一個名爲'log'的文件,則這不起作用。這是一個微妙的差異,但它會導致腳本中難以找到的錯誤。 – Abel 2017-09-28 01:32:36
您可以使用:
if not exist "C:\VTS\" mkdir "C:\VTS"
您還可以擴展代碼來替換任何丟失的文件預期。
if not exist "C:\VTS\important.file" echo. > "C:\VTS\important.file"
個人而言,我更喜歡這一點,因爲它不設置%ERRORLEVEL%,當目錄已經存在(Agent_9191的答案返回1錯誤代碼) – csauve 2012-06-18 14:02:06
這也是很好的和通用的,可以應用到你想要所有其他行動有條件地做:) – 2012-07-20 13:40:35
該文章有一些非常複雜的信息關於什麼驅動器格式適用於和不適用。 – jpmc26 2016-03-08 02:28:53