有人可以告诉我如何在 Windows 批处理脚本中执行以下操作吗? (
*.bat
):
更详细地说,我想在
VTS
驱动器上创建一个名为 C:\
的文件夹,但前提是该文件夹尚不存在。如果文件夹已经存在并且批处理已执行,我不想覆盖该文件夹的内容。
你只需使用这个:
if not exist "C:\VTS\" mkdir C:\VTS
只有当文件夹不存在时它才会创建一个目录。
请注意,仅当 VTS 存在并且是目录时,此存在测试才会返回 true。如果它不存在,或者作为文件存在,则 mkdir 命令将运行,并且应该会导致错误。您可能想检查 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 日更新;Microsoft 文章已下架,存档于 https://web.archive.org/web/20150609092521/https://support.microsoft.com/en-us/kb/65994 )
无论如何,请致电
mkdir C:\VTS
。它只会报告子目录已经存在。
编辑: 正如其他人所指出的,如果文件夹已存在,这确实会设置%ERRORLEVEL%。如果您的批处理(或调用它的任何进程)不关心错误级别,则此方法效果很好。由于问题没有提到避免错误级别,所以这个答案是完全有效的。它满足创建文件夹(如果文件夹不存在)的需要,并且不会覆盖现有文件夹的内容。否则请遵循 Martin Schapendonk 的回答。
mkdir C:\VTS 2> NUL
创建一个名为
VTS
的文件夹并将 A subdirectory or file TEST already exists
输出到 NUL
。
或
(C:&(mkdir "C:\VTS" 2> NUL))&
将盘符更改为
C:
、mkdir
,将错误输出到NUL
并运行下一个命令。
set myDIR=LOG
IF not exist %myDIR% (mkdir %myDIR%)
我使用这种方式,你应该在目录名末尾加一个反斜杠以避免该地方存在于一个没有扩展名且与你指定的目录同名的文件中,千万不要使用“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
您可以使用:
if not exist "C:\VTS\" mkdir "C:\VTS"
您还可以扩展代码来替换任何丢失的预期文件。
if not exist "C:\VTS\important.file" echo. > "C:\VTS\important.file"
这应该适合你:
IF NOT EXIST "\path\to\your\folder" md \path\to\your\folder
不过,还有另一种方法,但可能不是100%有用:
md \path\to\your\folder >NUL 2>NUL
此命令创建文件夹,但如果文件夹存在,则不会显示错误输出。我强烈建议您使用第一个。第二个是如果您与另一个有问题。
如果文件夹不存在,您需要创建一个文件夹吗?好吧,这是一个如何操作的示例。
首先,我通过输入以下代码检查该文件夹是否尚不存在:
if not exist "FOLDERPATH" (
mkdir "FOLDERPATH"
)
所以如果我运行代码。如果该文件夹已经存在,它将什么也不做。如果文件夹已经存在,这就是我们要做的:
if exist "FOLDERPATH" (
rmdir /s /q "FOLDERPATH"
mkdir "FOLDERPATH"
)
现在,如果我运行代码,它将重新创建该文件夹(如果它已经存在)。这是示例代码:
@echo off
cls
if not exist "C:\ExamplePath\" (
echo Creating Folder...
mkdir "C:\ExamplePath\"
pause
)
if exist "C:\ExamplePath\" (
echo Re-Creating Folder...
rmdir /s /q "C:\ExamplePath"
pause
)
现在
if exist
部分是可选的。如果该文件夹已经存在,您可以像这样跳转到标签:
if exist "FOLDERPATH" (
goto :ExampleLabel
:ExampleLabel
echo Hi.
pause
)
希望这可以帮助解决您的问题。
就我个人而言,我会这样做:
if not exist "C:\YourFolderPathHere\" (
mkdir C:\YourFolderPathHere\
) else (
echo Folder already exists!
)
让我们分解一下:
if not exist "C:\YourFolderPathHere\"
:这会检查文件夹。路径后面的反斜杠(\)非常重要,否则它将查找文件而不是文件夹。mkdir C:\YourFolderPathHere\
:如果上述语句成立,则创建目录。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\
尚未测试过,所以不要引用我的话。
我为我在 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\"
我正在从 Dockerfile 在 docker 上下文中创建一个文件夹,以避免如果文件夹已存在于
mkdir
命令上,则构建错误停止,并且这里的任何答案都不适合我,但有些启发我尝试这个,那有效(RUN
是 Dockerfile 命令,默认情况下在 Windows docker 上,在 cmd 上下文中运行):
RUN mkdir C:\VTS & echo.
您可以使用以下批处理脚本来执行此操作 此外,您还可以根据创建或不创建文件夹来执行更多命令。
if not exist "Folder_Path" (
GOTO CREATE_FOLDER_LABEL
) else (
GOTO DONT_CREATE_FOLDER_LABEL
)
:CREATE_FOLDER_LABEL
rem all the commands which you want to execute due to creating folder goes here
MKDIR "FOLDER_PATH"
exit
:DONT_CREATE_FOLDER_LABEL
rem all the commands which you want to execute due to not creating folder goes here
ECHO "the FOLDER_PATH is already exist"
exit
您可以将
/I
选项添加到 mkdir 命令中。 /I
选项告诉 mkdir
仅在目录尚不存在时创建该目录。如果目录已经存在,mkdir
命令将不执行任何操作并继续执行下一个命令。
mkdir /I dist