Windows 如何在运行";时使用结果创建新目录;目录/b/s";在命令行上

Windows 如何在运行";时使用结果创建新目录;目录/b/s";在命令行上,windows,batch-file,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-W

我希望这在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
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

我想从上面的目录列表中获取结果,并在目录结构的中间追加目录名“存档”,该目录结构将创建这个新目录结构。由此产生的结构如下:

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

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

for
命令是您的朋友。阅读的帮助,然后在命令提示符下尝试此操作

for /d %a in (*) do @echo %a
如您所见,它跟随当前目录中的所有子文件夹

因此,

for /d %a in (*) do @echo %cd%\Archive\%a
可能适合你的需要

@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