У меня был командный файл, который (при упрощении) выглядел так:
@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
Он вызывал всевозможные ошибки, когда сталкивался с разными именами файлов в разных ситуациях:
MyProgram version 2
не может быть отражено, потому что 2>>
было неправильно интерпретировано. MyProgram (next version)
не может быть отражено, потому что скобки должны были ^
экранироваться. MyProgram O&O
не может быть отражено из-за символа &
MyProgram!
не может быть отражено из-за символа !
IsЕсть ли решение, которое работает для всех таких ситуаций (включая комбинации и вложения и т. д.)?
(ASCII в порядке - мне не нужна поддержка Unicodeпрямо сейчас.)