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

时间:2010-11-12 14:01:14

标签: windows batch-file cmd

有人可以告诉我如何在Windows批处理脚本中执行以下操作吗? (*.bat):

  • 仅当文件夹尚不存在时才创建

更详细地说,我想在VTS驱动器上创建一个名为C:\的文件夹,但前提是该文件夹尚不存在。我不想覆盖该文件夹的内容(如果它已经存在并且执行批处理。

13 个答案:

答案 0 :(得分:536)

你只需使用它:if not exist "C:\VTS\" mkdir C:\VTS只有当文件夹不存在时才会创建一个目录。

请注意,只有VTS存在并且是目录时,此存在测试才会返回true。如果它不存在,或者作为文件存在,则mkdir命令将运行,并且应该导致错误。您可能想要检查VTS是否也作为文件存在。

答案 1 :(得分:194)

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日; Microsoft文章已关闭,存档于https://web.archive.org/web/20150609092521/https://support.microsoft.com/en-us/kb/65994

答案 2 :(得分:50)

无论如何,只需致电mkdir C:\VTS即可。它只会报告该子目录已存在。

编辑:正如其他人所说,如果文件夹已存在,则会设置%ERRORLEVEL%。如果您的批处理(或任何调用它的进程)不关心错误级别,则此方法可以很好地工作。由于问题没有提到避免错误级别,这个答案是完全有效的。它满足创建文件夹(如果它不存在)的需要,并且它不会覆盖现有文件夹的内容。否则请关注Martin Schapendonk's answer

答案 3 :(得分:34)

mkdir C:\VTS 2> NUL

创建一个名为VTS的文件夹,并将A subdirectory or file TEST already exists输出到NUL

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

将驱动器号更改为C:mkdir,输出错误为NUL并运行下一个命令。

答案 4 :(得分:29)

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

答案 5 :(得分:15)

我使用这种方法,你应该在目录名末尾加一个反斜杠,以避免该地方存在于没有与你指定目录同名的扩展名的文件中,从不使用< strong>“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

答案 6 :(得分:15)

您可以使用:

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

您还可以展开代码以替换任何缺少的预期文件。

if not exist "C:\VTS\important.file" echo. > "C:\VTS\important.file"

答案 7 :(得分:5)

这应该对您有用:

IF NOT EXIST "\path\to\your\folder" md \path\to\your\folder

但是,还有另一种方法,但可能并非100%有用:

md \path\to\your\folder >NUL 2>NUL

这将创建一个文件夹,但是如果文件夹存在则不显示错误输出。我强烈建议您使用第一个。第二个是如果您遇到其他问题。

答案 8 :(得分:1)

如果文件夹不存在,您需要创建一个文件夹吗?好吧,这是一个如何做到的例子。

首先,我输入以下代码检查文件夹是否不存在:

if not exist "FOLDERPATH" ( 
    mkdir "FOLDERPATH"
)

所以如果我运行代码。如果文件夹已经存在,它将什么也不做。如果文件夹已经存在,我们会这样做:

if exist "FOLDERPATH" ( 
    rmdir /s /q "FOLDERPATH"
    mkdir "FOLDERPATH"
)

现在,如果我运行代码,它会重新创建文件夹(如果它已经存在)。这是示例代码:

@echo off
cls

if not exist "C:\Windows\System32" ( 
    echo Creating Folder...
    mkdir "C:\Windows\System32"
    pause
)

if exist "C:\Windows\System32" ( 
    echo Re-Creating Folder...
    rmdir /s /q "C:\Windows\System32"
    pause
)

现在 if exist 部分是可选的。如果文件夹已经存在,你可以像这样跳转到一个标签:

if exist "FOLDERPATH" ( 
    goto :ExampleLabel
    
    :ExampleLabel
    echo Hi.
    pause
)

希望这可以帮助您解决问题。

答案 9 :(得分: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\"

答案 10 :(得分:0)

就我个人而言,我会这样做:

if not exist "C:\YourFolderPathHere\" (
mkdir C:\YourFolderPathHere\
) else (
echo Folder already exists!
)

让我们分解一下:

  1. if not exist "C:\YourFolderPathHere\":这会检查文件夹。路径后面的反斜杠 (\) 非常重要,否则它会查找文件而不是文件夹。
  2. mkdir C:\YourFolderPathHere\:如果上述语句为真,则创建目录。
  3. echo Folder already exists!:打印到控制台它已经存在。

这是相同的代码,但有注释:

::Does the folder exist?
if not exist "C:\YourFolderPathHere\" (
::No, make it.
mkdir C:\YourFolderPathHere\
) else (
::Yes, don't make it, and print text.
echo Folder already exists!
)

单行版本: if not exist "C:\YourFolderPathHere\" mkdir C:\YourFolderPathHere\

虽然还没有测试过,所以不要引用我的话。

答案 11 :(得分:0)

你可以做这个例子:

if exists patch\folder (goto :1) else (goto :2)

:1

md filename_when_exists

cls
echo DONE!
pause
exit

2:

echo OH NO! THE DIRECTORY DOESN'T EXIST!

pause

答案 12 :(得分:-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中的文件。 <{1}}中的任何文件夹都不会被触及。