2010-11-12 134 views
301

有人可以告訴我如何在Windows批處理腳本中執行以下操作嗎? (*.bat):使用批處理創建文件夾,但前提是文件夾不存在

  • 創建一個文件夾,只有當它不存在

更詳細,我想創建一個在C:\驅動器上名爲VTS文件夾,但只有在該文件夾沒有按已經不存在了。如果文件夾已經存在並且批處理被執行,我不想覆蓋該文件夾的內容。

回答

167
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

+12

個人而言,我更喜歡這一點,因爲它不設置%ERRORLEVEL%,當目錄已經存在(Agent_9191的答案返回1錯誤代碼) – csauve 2012-06-18 14:02:06

+1

這也是很好的和通用的,可以應用到你想要所有其他行動有條件地做:) – 2012-07-20 13:40:35

+0

該文章有一些非常複雜的信息關於什麼驅動器格式適用於和不適用。 – jpmc26 2016-03-08 02:28:53

43

只需撥打mkdir C:\VTS不管。它只會報告該子目錄已經存在。

編輯:正如其他人已經指出,如果文件夾已經存在,這會設置%ERRORLEVEL%。如果您的批處理(或任何調用它的進程)不關心錯誤級別,則此方法可以很好地工作。由於這個問題沒有提到避免錯誤級別,所以這個答案是完全有效的。如果文件夾不存在,它將滿足創建文件夾的需要,並且不會覆蓋現有文件夾的內容。否則,請按照Martin Schapendonk's answer

+13

由於意外的錯誤消息/警告,這是一種不良行爲。 – SeriousM 2013-04-25 13:13:43

+5

當違反最佳實踐時調用「完全有效」的東西在智力上是不誠實的。再舉一個例子:當有人問你如何避免某個特定的安全問題時,即使問題沒有明確規定最低安全影響作爲先決條件,你的答案也不應該是「以計算機管理員身份運行」。 :-) – 2014-06-12 05:59:33

+2

@JouniHeikniemi s /最佳實踐/ Jouni的個人喜好 – dss539 2015-09-08 22:29:47

-5

試試這個

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中的任何文件夾都不會被觸碰。

+4

這是如何回答這個問題的? – 2016-02-09 16:00:25

0

我爲我的腳本創建了這個用於我的工作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\" 
26
mkdir C:\VTS 2> NUL 

創建一個名爲VTS和輸出A subdirectory or file TEST already existsNUL文件夾。

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

變化的驅動器號到C:mkdir,輸出誤差NUL並運行的下一個命令。

+0

漂亮乾淨的單線式 – kaptan 2013-10-10 18:40:40

416

你只是使用這個:if not exist "C:\VTS\" mkdir C:\VTS它只會在文件夾不存在的情況下創建一個目錄。

請注意,只有存在VTS並且是目錄時,此存在測試纔會返回true。如果它不存在,或者作爲文件存在,則mkdir命令將運行,並應導致錯誤。您可能需要檢查VTS是否作爲文件存在。

+72

我真的很驚訝,有人花了三年的時間想出這個答案。 +1 – Bobson 2014-08-22 14:54:01

+4

除了它是錯的。你必須檢查NUL設備,否則它將無法工作。看到我的回答比這個早三年。 – 2016-02-11 21:39:00

+0

@MartinSchapendonk據測試我可以看出,它適用於Windows 7和Windows Server 2012,如果它不起作用,至少回到XP和Windows 10,我會感到非常驚訝。您能否提供條件當這不起作用? – jpmc26 2016-03-10 19:00:38

10

我用這種方式,你應該放一個反斜槓的目錄名稱結束,以避免發生在一個文件中存在沒有擴展名具有相同名稱爲您指定的目錄中,從不使用「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 
+0

你的解決方案特別有趣的是你使用'!errorlevel!',即延遲擴展。否則,變量ERRORLEVEL將在輸入第一個if之前被解析(即在解析時間)。現在它在執行時被解析,所以它可以捕獲'mkdir'的結果。你也是正確的,即使你測試了存在,你仍然應該測試成功(例如:訪問被拒絕的錯誤,例如)。與其他人相比,非常好的解決方案,+ 10! – Abel 2017-09-28 01:41:15

27
set myDIR=LOG 
IF not exist %myDIR% (mkdir %myDIR%) 
+0

正如其他人指出的那樣,您可能在最高評分答案中看到過,如果您有一個名爲'log'的文件,則這不起作用。這是一個微妙的差異,但它會導致腳本中難以找到的錯誤。 – Abel 2017-09-28 01:32:36

9

您可以使用:

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

您還可以擴展代碼來替換任何丟失的文件預期。

if not exist "C:\VTS\important.file" echo. > "C:\VTS\important.file" 
相關問題