【问题标题】:mkdir in windows multiple path in single command单个命令中的 Windows 多路径中的 mkdir
【发布时间】:2014-02-09 02:04:45
【问题描述】:
@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创建文件夹。 sourcepst02 工作正常。

我好像不能MKDIR整条路径,系统一头雾水,必须一一做。 我在这里遗漏了什么吗?

【问题讨论】:

  • 仅供参考,您不需要第一个 mkdir 命令。 mkdir 自动在请求的路径中创建所有文件夹。
  • ...您可以考虑在mkdir 行中附加` 2>nul` 以抑制directory already exists 消息,如果cmd 认为您需要得到通知。跨度>
  • @AndrewMedico 不,它不起作用。它不允许创建第二条路径。
  • 您正在网络机器上创建它们。您是否收到“访问被拒绝”错误?

标签: windows command-line mkdir


【解决方案1】:
@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

我发现了问题,似乎无法在网络驱动器上创建多级子文件夹。 所以映射到本地驱动器解决问题。

【讨论】:

  • 网络共享在什么样的服务器上(如果你知道的话)?我可以在这里的 UNC 路径上使用单个 mkdir 创建多个目录,所以我想知道是不是网络服务器导致了故障?
  • 我也遇到过这个问题,mkdir 命令不会在映射网络驱动器上的单个命令中创建嵌套目录。我不知道为什么它不会,但我们又在谈论微软——对吗?
【解决方案2】:

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

我认为最多支持 8 级目录,总长度为 260 个字符是另一个限制。

【讨论】:

  • 我还没有听说过8级目录限制,但这可能取决于网络?路径名看起来应该小于 260 个字符。
  • 可能是 FAT32 限制?我刚刚在 NTFS 本地驱动器中尝试过,我创建了一个 9 级深文件夹。
【解决方案3】:

添加行:

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 \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.

【讨论】:

  • 我认为这并不重要,但我永远无法确定批处理文件命令中的所有怪癖。此外,正如 Magoo 在另一条评论中提到的,命令扩展通常默认启用。因此,如果 setlocal enableextensions 最终有所帮助,您可能需要阅读 help cmd 的输出以了解如何禁用它并解决该问题。
【解决方案4】:

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%,这样那个 字符串就不会重复?

【讨论】:

  • 我添加了新变量:@echo off set "var=string" set "today=%date:~10,4%-%date:~7,2%-%date:~4 ,2%" 但在 %today% 之后仍然无法在第二条路径上工作
  • set "var=string" 是一种通用语句格式。 set "today=%date:~10,4%-%date:~7,2%-%date:~4,2%" 是该格式的一个特定实例,其中 vartodaystring%date:~10,4%-%date:~7,2%-%date:~4,2% 这意味着“date 的内容,从位置 10 开始4 个字符"-"date 的内容,从位置 7 开始为 2 个字符"-"date 的内容,从位置 4 开始为 2 个字符"。 (第一个字符在位置0)。这分配给变量today。括起来的引号确保行上的任何尾随空格包含在分配的值中。
  • Michael Burr 的回答很有道理。在极少数情况下,有人故意关闭了自 1996 年以来包含在 CMD 中的增强功能。默认情况下,这些扩展已启用,并且假设扩展已启用是正常的。
【解决方案5】:

在路径周围加上引号。

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

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

【讨论】:

  • 是的,确实如此。如果对您不起作用,请澄清您收到的错误消息,
猜你喜欢
  • 1970-01-01
  • 2011-02-25
  • 2013-01-10
  • 1970-01-01
  • 2013-08-27
  • 2014-11-01
  • 2012-11-21
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多