假设以下目录结构
my_script.bat
Dir1
File1.txt
Dir2
Dir3
File1.txt
Run Code Online (Sandbox Code Playgroud)
我想压扁它,以便我只有一个目录,其中每个文件名都以当前目录(我的批处理文件所在的位置)下面的所有父目录作为前缀.
如此扁平化以上列表会产生类似的东西
Dir1-File1.txt
Dir2-Dir3-File1.txt
Run Code Online (Sandbox Code Playgroud)
或者只是某种方式来识别它来自哪个文件夹,不一定必须连字符.
这可以用Windows批处理文件完成吗?或者也许已经有了它的命令?
我必须赞扬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!"
)
Run Code Online (Sandbox Code Playgroud)
输出:
Dir1-File1.txt
Dir2-Dir3-File1.txt
Run Code Online (Sandbox Code Playgroud)