Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
windows中的mkdir单个命令中的多路径_Windows_Command Line_Mkdir - Fatal编程技术网

windows中的mkdir单个命令中的多路径

windows中的mkdir单个命令中的多路径,windows,command-line,mkdir,Windows,Command Line,Mkdir,我对脚本进行了如下修改。 我仍然无法在sourcepst01、03、04和05创建文件夹。 sourcepst02工作正常 看来我不能把整条路都弄乱了,系统混乱了,必须一个接一个地做。 我在这里遗漏了什么吗?在路径周围加上引号 @echo off set "var=string" set "today=%date:~10,4%-%date:~7,2%-%date:~4,2%" set "path_backup=\\SGSINWPDFS01v\SG\OTHERS\IT\OTHERS\WORKSTA

我对脚本进行了如下修改。 我仍然无法在sourcepst01、03、04和05创建文件夹。 sourcepst02工作正常

看来我不能把整条路都弄乱了,系统混乱了,必须一个接一个地做。
我在这里遗漏了什么吗?

在路径周围加上引号

@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%"

问题是名称中有空格,mkdir将它们解释为两个参数,而不是单个名称。引号将迫使它将所有内容都解释为一条路径。

约翰·迪蒂斯已经解决了这个问题,但我建议

set“path\u sourcepst4=My Documents\Outlook”
mkdir“%path\u backup%\%username%\PST-%date:~10,4%-%date:~7,2%-%date:~4,2%\%path\u sourcepst4%”
使用
设置“var=string”
格式将确保设置到变量中的值不会在行中包含任何多余的(基本上不可见的)尾随空格。你只需要被那个人抓住一次。。。它还减少了“正在解决的问题”的数量

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

添加行:

mkdir "%foo%\%bar%\%somename%"
就在批处理文件的
@echo off
行之后。这将启用
mkdir
创建任何中间目录

help mkdir
的输出摘录:

setlocal enableextensions

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

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

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.
我发现了这个问题,似乎在网络驱动器上无法创建多个级别的子文件夹。
因此,你不需要第一个<代码> MKDIr < /代码>命令。<代码> MKDIr < /代码>自动创建请求路径中的所有文件夹……并且可以考虑将“2”NULL附加到<代码> MKDIr < /代码>行以禁止<代码>目录已经存在消息(S)应该
cmd
觉得需要通知您。@AndrewMedico不,它不起作用。它不允许创建第二条路径。您正在网络计算机上创建它们。是否收到“访问被拒绝”错误?我添加了新变量:@echo off set“var=string”set今天=%date:~10,4%-%date:~7,2%-%date:~4,2%但是在%today%之后的第二条路径上仍然不起作用
set“var=string”
是一种通用的语句格式
set“today=%date:~10,4%-%date:~7,2%-%date:~4,2%”
是该格式的一个特定实例,其中var为
today
,字符串为
%date:~10,4%-%date:~7,2%-%date:~4,2%
,意思是“日期的内容从第10位开始4个字符”-“日期的内容从第7位开始2个字符”-“日期
的内容,从位置4开始,共2个字符”。(第一个字符位于位置
0
)。这是分配给变量
的。括起来的引号确保行上的任何尾随空格都不包含在分配的值中。Michael Burr的回答很有意义。在极少数情况下,自1996年以来,有人故意关闭
CMD
中包含的增强功能。默认情况下e扩展已启用,假设扩展已启用是正常的。是的,确实如此。请澄清您收到的错误消息,如果它对您不起作用,我认为这无关紧要,但我永远无法确定批处理文件命令中的所有怪癖。此外,正如Magoo在另一篇评论中提到的,命令扩展是不正确的默认情况下,RMALY已启用。因此,如果
setlocal enableextensions
最终起到了帮助作用,您可能需要阅读
help cmd
的输出,以了解如何禁用它并解决该问题。我没有听说过8级目录限制,但可能这取决于网络?路径名看起来应该不超过260个字符。可能是FAT32限制?我只是在NTFS本地驱动器中尝试了一下,然后创建了一个9级深的文件夹。确定。网络共享在哪种服务器上(如果您知道的话)?我可以用一个
mkdir
在UNC路径上创建多个目录,所以我想知道是不是网络服务器导致了故障?我也遇到过这样的问题,
mkdir
命令不会在映射的网络驱动器上的单个命令中创建嵌套目录。我不确定为什么不会,但还是会这样我们在谈论微软——我说的对吗?
@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