2

假设如下目录结构

my_script.bat
Dir1
   File1.txt
Dir2
   Dir3
      File1.txt

我想将它展平,以便我只有一个目录,其中每个文件名都以当前目录(我的批处理文件所在的位置)下方的所有父目录为前缀。

所以扁平化上面的列表会产生类似的东西

Dir1-File1.txt
Dir2-Dir3-File1.txt

或者只是某种方式来识别它来自哪个文件夹,不一定要连字符。

这可以用windows批处理文件完成吗?或者也许已经有一个命令?

4

2 回答 2

5

我必须将原始想法归功于Jacob Seleznev,但这是一个解决方案,其中还包括新文件名中的路径:

Setlocal EnableDelayedExpansion
for /r %%F in (*) do (
    set _name=%%~fF

    rem Change the path to a relative path by replacing the current folder with ""
    set _name=!_name:%cd%\=!

    rem Replace slashes with hyphens
    set _name=!_name:\=-!

    copy "%%F" ".\!_name!"
)

输出:

Dir1-File1.txt
Dir2-Dir3-File1.txt
于 2012-08-20T06:13:11.767 回答
2
for /r %F in (*) do set name=%~pfF
set name=%name:\=-%
echo %name% 
于 2012-08-20T05:20:38.620 回答