在单个命令中的Windows多pathmkdir

@echo off set "var=string" set "today=%date:~10,4%-%date:~7,2%-%date:~4,2%" set "path_backup=\\SGSINWPDFS01v\SG\OTHERS\IT\OTHERS\WORKSTATIONS\SCHEDULE" set "path_sourcepst01=AppData\Local\Microsoft\Outlook" set "path_sourcepst02=Desktop" set "path_sourcepst03=My Documents\PST" set "path_sourcepst04=My Documents\Outlook" set "path_sourcepst05=My Documents\Outlook Files" mkdir "%path_backup%\%username%\%today%" mkdir "%path_backup%\%username%\%today%\PST" mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst01%" mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst02%" mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst03%" mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst04%" mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst05%" 

我修改了上面的脚本。 我仍然无法在sourcepst01,03,04和05创build文件夹。sourcepst02工作正常。

看来我不能MKDIR整个path,系统混乱,一定要做一个一个的。 我在这里错过了什么?

在路径周围放置引号。

 mkdir "%foo%\%bar%\%somename%" 

问题在于名称中有空格,而mkdir正在将它们解释为两个参数而不是单个名称。 引号将迫使它把所有东西都解释为单一的路径。

约翰·德斯(John Deters)已经解决了这个问题 – 但我建议

 set "path_sourcepst4=My Documents\Outlook" mkdir "%path_backup%\%username%\PST-%date:~10,4%-%date:~7,2%-%date:~4,2%\%path_sourcepst4%" 

使用set "var=string"格式将确保在变量中设置的值不包括行中的任何杂散(并且大部分不可见)尾随空格。 你只需要被那个人抓住一次……这也减少了解决问题的数量。

为什么不设置一个名为say yyyymmdd的变量为%date:~10,4%-%date:~7,2%-%date:~4,2%这样这个字符串不会被重复?

添加行:

 setlocal enableextensions 

@echo off在批处理文件的@echo off行之后。 这将使mkdir创建任何中间目录。

help mkdir输出摘录:

 If Command Extensions are enabled MKDIR changes as follows: MKDIR creates any intermediate directories in the path, if needed. For example, assume \a does not exist then: mkdir \a\b\c\d is the same as: mkdir \a chdir \a mkdir b chdir b mkdir c chdir c mkdir d which is what you would have to type if extensions were disabled. 
 @echo off set "var=string" set "today=%date:~10,4%-%date:~7,2%-%date:~4,2%" set "path_backup=\\SGSINWPDFS01v\SG\OTHERS\IT\OTHERS\WORKSTATIONS\SCHEDULE" set "path_sourcepst01=AppData\Local\Microsoft\Outlook" set "path_sourcepst02=Desktop" set "path_sourcepst03=My Documents\PST" set "path_sourcepst04=My Documents\Outlook" set "path_sourcepst05=My Documents\Outlook Files" subst b: "%path_backup%" mkdir "%path_backup%\%username%\%today%" mkdir "%path_backup%\%username%\%today%\PST" mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst01%" mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst02%" mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst03%" mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst04%" mkdir "%path_backup%\%username%\%today%\PST\%path_sourcepst05%" subst b: /D 

我发现这个问题,似乎网络驱动器不能创建多个级别的子文件夹。 所以映射到本地驱动器解决问题。

问题可能是由于文件夹深度的嵌套级别。

我相信8级目录是支持的最大值,总共260个字符是另一个限制。