我想在一个大目录中处理批处理操作。实际上我有这个过程的批处理脚本。但在这里,我有个问题。某些目录名、文件名包含“”(空格字符)。因此在批处理操作中,这些名称作为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”或“”)上运行此脚本。这里没有“撤消”功能。一定要有后援。

08-04 12:22