Answers:
您只需要使用它:if not exist "C:\VTS\" mkdir C:\VTS
仅当文件夹不存在时,它才会创建目录。
请注意,仅当VTS存在且为目录时,此存在测试才会返回true。如果它不存在或作为文件存在,则mkdir命令将运行,并会导致错误。您可能还需要检查VTS是否也作为文件存在。
NUL
。
if exist "a" if not exist "a\" (echo "it's a file") else (echo "it's a dir")
。关于您的最后一句话,我怀疑您的批处理文件在其他地方有问题。
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/zh-cn/kb/65994)
NUL
是一个L.
随便打电话mkdir C:\VTS
。它只会报告子目录已经存在。
编辑:正如其他人所指出的,如果文件夹已经存在,这的确会设置%ERRORLEVEL%。如果您的批处理(或任何调用它的进程)不关心错误级别,则此方法很好用。由于该问题未提及避免错误级别,因此此答案完全正确。它可以满足创建文件夹(如果该文件夹不存在)的需求,并且不会覆盖现有文件夹的内容。否则,请遵循Martin Schapendonk的回答。
我使用这种方式,您应该在目录名称的末尾加上一个反斜杠,以避免该位置存在于文件中,且没有扩展名,该扩展名与您指定的目录相同,请不要使用“ 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!
您可以使用:
if not exist "C:\VTS\" mkdir "C:\VTS"
您还可以扩展代码以替换任何缺少的预期文件。
if not exist "C:\VTS\important.file" echo. > "C:\VTS\important.file"
我为我的剧本创建了这个脚本,用于我的眼梁工作。
: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\"
if not exist "%Folder%" mkdir "%New-Folder%"