如何在命令行上运行“dir / b / s”时使用结果创建新目录

时间:2014-07-31 17:26:37

标签: windows batch-file

我希望在Windows批处理中可以实现这一点:)

根据目录结构中的目录列表,是否可以获取该列表的结果并在目录结构之前/之后/中间附加目录名以创建新目录?

例如,如果我向特定目录发出dir /b /s命令,它将列出该目录中的目录,如下所示:

E:\ftproot\MiddlewareIO>dir /b /s

E:\ftproot\MiddlewareIO\Benefits
E:\ftproot\MiddlewareIO\Blackboard
E:\ftproot\MiddlewareIO\Data-Warehouse
E:\ftproot\MiddlewareIO\EmplWorkerDemo
E:\ftproot\MiddlewareIO\IDM
E:\ftproot\MiddlewareIO\PayrollData
E:\ftproot\MiddlewareIO\PayrollGLData

我想从上面的目录列表中获取结果,并在目录结构的中间追加目录名“Archive”,这将创建这个新的目录结构。得到的结构如下:

E:\ftproot\MiddlewareIO\Archive\Benefits
E:\ftproot\MiddlewareIO\Archive\Blackboard
E:\ftproot\MiddlewareIO\Archive\Data-Warehouse
E:\ftproot\MiddlewareIO\Archive\EmplWorkerDemo
E:\ftproot\MiddlewareIO\Archive\IDM
E:\ftproot\MiddlewareIO\Archive\PayrollData
E:\ftproot\MiddlewareIO\Archive\PayrollGLData

此列表可能会增长,手动更新批处理文件可能非常繁琐。

2 个答案:

答案 0 :(得分:0)

for命令是你的朋友。阅读help for,然后在命令提示符

中尝试此操作
for /d %a in (*) do @echo %a

如您所见,它跟随当前目录中的所有子文件夹。

因此,

for /d %a in (*) do @echo %cd%\Archive\%a

可能符合您的需要

答案 1 :(得分:0)

@echo off

pushd E:\ftproot\MiddlewareIO

mkdir Archive

for /f "delims=\ tokens=1,2,3*" %%a in ('dir . /ad/s/b') do (
    mkdir "Archive\%%~d"
)

popd

您还可以在创建目录之前检查目录是否存在:

@echo off

pushd E:\ftproot\MiddlewareIO

if not exist Archive\. mkdir Archive

for /f "delims=\ tokens=1,2,3*" %%a in ('dir . /ad/s/b') do (
    if not exist "Archive\%%~d\." mkdir "Archive\%%~d"
)

popd

新建议:过滤档案:

@echo off

pushd E:\ftproot\MiddlewareIO

if not exist Archive\. mkdir Archive

for /f "delims=\ tokens=1,2,3*" %%a in ('dir /ad /s /b ^| find /v "\Archive"') do (
    if not exist "Archive\%%~d\." mkdir "Archive\%%~d"
)

popd