有人可以告诉我如何在Windows批处理脚本中执行以下操作吗? (*.bat
):使用批处理创建文件夹,但前提是文件夹不存在
- 创建一个文件夹,只有当它不存在
更详细,我想创建一个在C:\
驱动器上名为VTS
文件夹,但只有在该文件夹没有按已经不存在了。如果文件夹已经存在并且批处理被执行,我不想覆盖该文件夹的内容。
有人可以告诉我如何在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)
只需拨打mkdir C:\VTS
不管。它只会报告该子目录已经存在。
编辑:正如其他人已经指出,如果文件夹已经存在,这会设置%ERRORLEVEL%。如果您的批处理(或任何调用它的进程)不关心错误级别,则此方法可以很好地工作。由于这个问题没有提到避免错误级别,所以这个答案是完全有效的。如果文件夹不存在,它将满足创建文件夹的需要,并且不会覆盖现有文件夹的内容。否则,请按照Martin Schapendonk's answer。
试试这个
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
中的任何文件夹都不会被触碰。
这是如何回答这个问题的? – 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 exists
到NUL
文件夹。
或
(C:&(mkdir "C:\VTS" 2> NUL))&
变化的驱动器号到C:
,mkdir
,输出误差NUL
并运行的下一个命令。
漂亮干净的单线式 – kaptan 2013-10-10 18:40:40
你只是使用这个:if not exist "C:\VTS\" mkdir C:\VTS
它只会在文件夹不存在的情况下创建一个目录。
请注意,只有存在VTS并且是目录时,此存在测试才会返回true。如果它不存在,或者作为文件存在,则mkdir命令将运行,并应导致错误。您可能需要检查VTS是否作为文件存在。
我用这种方式,你应该放一个反斜杠的目录名称结束,以避免发生在一个文件中存在没有扩展名具有相同名称为您指定的目录中,从不使用“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! – Abel 2017-09-28 01:41:15
set myDIR=LOG
IF not exist %myDIR% (mkdir %myDIR%)
正如其他人指出的那样,您可能在最高评分答案中看到过,如果您有一个名为'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"
个人而言,我更喜欢这一点,因为它不设置%ERRORLEVEL%,当目录已经存在(Agent_9191的答案返回1错误代码) – csauve 2012-06-18 14:02:06
这也是很好的和通用的,可以应用到你想要所有其他行动有条件地做:) – 2012-07-20 13:40:35
该文章有一些非常复杂的信息关于什么驱动器格式适用于和不适用。 – jpmc26 2016-03-08 02:28:53