我想在一个大目录中处理批处理操作。实际上我有这个过程的批处理脚本。但在这里,我有个问题。某些目录名、文件名包含“”(空格字符)。因此在批处理操作中,这些名称作为2个参数传递。而那些线是行不通的。所以我想用“\u”来重命名“”来解决这个问题。
例子:
process/mydirectory/ola和me/private/topsecretpictures/
这会产生错误。下面一个很好用
process/mydirectory/ola和me/private/topsecretpictures
我的目标是:递归地转换ola和me
:)
提前谢谢..
最佳答案
以下脚本递归重命名所有文件和目录,从给定目录开始,将空格转换为下划线。spaces_to_underscores.bat
来源:
@echo off
setlocal
for /r "%~1" %%t in (.) do (
for /f "usebackq tokens=*" %%f in (`dir /b/a-d "%%~t" 2^>nul:`) do (
call :proc "%%~f" "%%~t"
)
for /f "usebackq tokens=*" %%d in (`dir /b/ad "%%~t" 2^>nul:`) do (
call :proc "%%~d" "%%~t"
)
)
exit /b 0
:proc
set fn=%~1
if "%fn: =_%"=="%fn%" exit /b 0
set fn=%~2\%fn: =_%
move "%~2\%~1" "%fn%" >nul:
exit /b 0
用途:
spaces_to_underscores "My Directory"
给定此目录结构
My Directory
Ola and Me
Private
TopSecretPictures
它会将文件夹“
Ola and Me
”重命名为“Ola_and_Me
”,并将诸如“Photo 001.jpg
”之类的任何文件重命名为“Photo_001.jpg
”。不会重命名起始目录“My Directory
”。警告:不要在标准Windows目录(如“
C:\Documents and Settings
”或“C:\Program Files
”或“My Documents
”或“Application Data
”或“”)上运行此脚本。这里没有“撤消”功能。一定要有后援。