我希望在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
此列表可能会增长,手动更新批处理文件可能非常繁琐。
答案 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