【问题标题】:Create Subdirectories Under Each Directory Using Windows Command Line使用 Windows 命令行在每个目录下创建子目录
【发布时间】:2013-08-05 15:51:33
【问题描述】:

我正在尝试创建一个 Windows 命令行脚本,它允许我在网络驱动器上存在的每个文件夹下重新创建一个目录结构。我最初是在 CMD 中创建代码,然后在获得所需结果时将其转换为批处理文件。

目前我有以下:

set location=\\READYSHARE\USB_Storage\Global

for /r %location% %f in ("dir %location% /a:D") do (

MD "%location%\Archived Tenants"
MD "%location%\Current tenant -"
MD "%location%\Current tenant -\Tenancy Sign up Pack"
MD "%location%\Owners\"
MD "%location%\Owners\Advertising Photos"
MD "%location%\Owners\Invoices"
MD "%location%\Owners\Quotes"
MD "%location%\Owners\Routine Inspections"
)

显然这并没有给我想要的输出,因为文件夹是在 \READYSHARE\USB_Storage\Global 下创建的,而不是为 \READYSHARE\USB_Storage\Global 中包含的所有子目录创建的。于是我把它改成了:

set location=\\READYSHARE\USB_Storage\Global

for /r %location% %f in ("dir %location% /a:D") do (

MD "%f\Archived Tenants"
MD "%f\Current tenant -"
MD "%f\Current tenant -\Tenancy Sign up Pack"
MD "%F\Owners\"
MD "%f\Owners\Advertising Photos"
MD "%f\Owners\Invoices"
MD "%f\Owners\Quotes"
MD "%f\Owners\Routine Inspections"
)

这显然也不起作用。

有人可以就如何产生所需的结果向我提供帮助吗?

感谢您的帮助。

问候, 斯科特

【问题讨论】:

    标签: windows for-loop cmd mkdir


    【解决方案1】:
    for /r %location% %f in ("dir %location% /a:D") do (
    

    您将for /r(递归处理)的语法与for /f(文件处理/命令替换)的语法混为一谈。此外,如果您在批处理文件中运行它,则需要将循环变量 (%%f) 上的 % 加倍。

    如果您想直接在%location% 下创建文件夹结构,请执行以下操作:

    @echo off
    
    setlocal
    
    set "location=\\READYSHARE\USB_Storage\Global"
    
    md "%location%\Archived Tenants"
    md "%location%\Current tenant -"
    md "%location%\Current tenant -\Tenancy Sign up Pack"
    md "%location%\Owners\"
    md "%location%\Owners\Advertising Photos"
    md "%location%\Owners\Invoices"
    md "%location%\Owners\Quotes"
    md "%location%\Owners\Routine Inspections"
    

    如果您想在%location% 的所有顶级文件夹下创建文件夹结构,请执行以下操作:

    @echo off
    
    setlocal
    
    set "location=\\READYSHARE\USB_Storage\Global"
    
    for /d %%d in (%location%\*) do (
      md "%%d\Archived Tenants"
      md "%%d\Current tenant -"
      md "%%d\Current tenant -\Tenancy Sign up Pack"
      md "%%d\Owners\"
      md "%%d\Owners\Advertising Photos"
      md "%%d\Owners\Invoices"
      md "%%d\Owners\Quotes"
      md "%%d\Owners\Routine Inspections"
    )
    

    如果您想在%location% 的所有子文件夹(包括它们的子文件夹)下创建文件夹结构,请执行以下操作:

    @echo off
    
    setlocal
    
    set "location=\\READYSHARE\USB_Storage\Global"
    
    for /f "delims=" %%d in ('dir /b /a:d /s "%location%"') do (
      md "%%d\Archived Tenants"
      md "%%d\Current tenant -"
      md "%%d\Current tenant -\Tenancy Sign up Pack"
      md "%%d\Owners\"
      md "%%d\Owners\Advertising Photos"
      md "%%d\Owners\Invoices"
      md "%%d\Owners\Quotes"
      md "%%d\Owners\Routine Inspections"
    )
    

    【讨论】:

    • 非常感谢您的帮助。这个答案非常透彻,绝对正确。
    【解决方案2】:

    您可以使用 FOR 命令和 /F 选项来解析 DIR 命令的输出,然后使用 %a 变量作为子目录的名称。

    for /f %a in ('dir /a:D /B %location%') do (
      MD "%location%\%a\Archived Tenants"
      MD "%location%\%a\Current tenant -"
      MD "%location%\%a\Current tenant -\Tenancy Sign up Pack"
      MD "%location%\%a\Owners\"
      MD "%location%\%a\Owners\Advertising Photos"
      MD "%location%\%a\Owners\Invoices"
      MD "%location%\%a\Owners\Quotes"
      MD "%location%\%a\Owners\Routine Inspections"
    )
    

    注意:当您将其转换为批处理文件时,您需要复制变量名称中的 % (%a > %%a)

    【讨论】:

    • 非常感谢您的工作和建议。非常感谢。
    猜你喜欢
    • 2017-09-23
    • 2023-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2012-12-25
    • 2022-08-14
    • 2015-07-16
    相关资源
    最近更新 更多