我有一个batch file,当(简化)看起来像这样:
@Echo Off SetLocal EnableDelayedExpansion MD "MyProgram^!" MD "MyProgram version 2" MD "MyProgram (next version)" MD "MyProgram O&O" Del Folders.txt Call :AddFoldersRecursive . EndLocal Goto :EOF :AddFoldersRecursive FolderPath Echo %~1>>Folders.txt For /D %%f In ("%~1\*") Do Call :AddFoldersRecursive "%%~f" Goto :EOF
它在不同的情况下面对不同types的文件名时会引发各种错误:
MyProgram version 2不能被回显,因为2>>被解释不正确。 MyProgram (next version)不能被回显,因为括号必须被转义。 &符号, MyProgram O&O无法被回显 MyProgram! 无法回应,因为! 符号 是否有解决scheme适用于所有这些情况(包括组合和嵌套等)?
(ASCII是好的 – 我现在不需要 Unicode支持。)
编辑:采取2 …
For /D %%f In (*) Do ( Set "Text=%%~dpnxf" SetLocal EnableDelayedExpansion Echo.!Text!>>files.txt EndLocal )
启用延迟扩展吃惊叹号,所以我禁用它的输出阶段。 我在这里做的是复制到另一个变量,所以我可以做替换,然后用&替换^& 。 这可能不适用于所有有效的文件名,但对你的例子有效:
:AddFoldersRecursive FolderPath SetLocal DisableDelayedExpansion set "x=%~1" Set "x=%x:&=^&%" >>Folders.txt Echo %x% For /D %%f In ("%~1\*") Do Call :AddFoldersRecursive "%%~f" EndLocal Goto :EOF