2013-08-05 52 views
0

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

目前我有以下几点:

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 \全球创建的文件夹而不是包含在\所有子目录READYSHARE \ USB_Storage \全球。所以然后我把它改为:

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" 
) 

哪个显然不起作用。

有人可以请我提供如何产生预期结果的帮助吗?

谢谢你的帮助。

问候, 斯科特

回答

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" 
) 
+0

非常感谢您的帮助。这个答案是非常透彻的,并且绝对可以发现。 – user2337871

1

您可以使用带有/ F选项的FOR命令来解析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> %%一)

+0

非常感谢您的工作和建议。非常感谢。 – user2337871

相关问题