Windows多路径中的MKDIR单个命令中的多路径


@echo off
set "var=string"
set "today=%date:~10,4%-%date:~7,2%-%date:~4,2%"
set "path_backup=\SGSINWPDFS01vSGOTHERSITOTHERSWORKSTATIONSSCHEDULE"
set "path_sourcepst01=AppDataLocalMicrosoftOutlook"
set "path_sourcepst02=Desktop"
set "path_sourcepst03=My DocumentsPST"
set "path_sourcepst04=My DocumentsOutlook"
set "path_sourcepst05=My DocumentsOutlook 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上创建文件夹。SourcePST02工作正常。

看来我无法整个路径,系统混淆了,必须一一做。我在这里错过了什么吗?

添加行:

setlocal enableextensions

在批处理文件的@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 abcd
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.

在路径周围放了报价标记。

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

问题是名称中有空格,而Mkdir将它们解释为两个参数,而不是一个名称。报价标记将迫使其将所有内容解释为单个路径。

约翰·德斯特斯(John Deters)已确定了这个问题 - 但我建议

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

使用set "var=string"格式将确保设置为变量的值不会在线上包含任何流浪(很大程度上是无形的)尾随空间。您只需要被那个一次抓住...它还减少了" 的数量。

为什么不设置一个称为 yyyymmdd的变量对 %date:~10,4%-%date:~7,2%-%date:~4,2%,以便字符串未重复?

@echo off
set "var=string"
set "today=%date:~10,4%-%date:~7,2%-%date:~4,2%"
set "path_backup=\SGSINWPDFS01vSGOTHERSITOTHERSWORKSTATIONSSCHEDULE"
set "path_sourcepst01=AppDataLocalMicrosoftOutlook"
set "path_sourcepst02=Desktop"
set "path_sourcepst03=My DocumentsPST"
set "path_sourcepst04=My DocumentsOutlook"
set "path_sourcepst05=My DocumentsOutlook 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个字符是另一个限制。

最新更新