使用批处理创建文件夹,但前提是文件夹不存在

问题描述:

有人可以告诉我如何在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

+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

只需拨打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

试试这个

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

我为我的脚本创建了这个用于我的工作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 existsNUL文件夹。

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

变化的驱动器号到C:mkdir,输出误差NUL并运行的下一个命令。

+0

漂亮干净的单线式 – kaptan 2013-10-10 18:40:40

你只是使用这个: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

我用这种方式,你应该放一个反斜杠的目录名称结束,以避免发生在一个文件中存在没有扩展名具有相同名称为您指定的目录中,从不使用“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

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

正如其他人指出的那样,您可能在最高评分答案中看到过,如果您有一个名为'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"