如何通过Windows批处理操作递归替换名称

Yay*_*aya 3 windows scripting batch-file

我想在一个大目录中处理批处理操作.实际上我有该进程的批处理脚本.但在这里,我有一个问题.一些目录名,文件名包含""(空格字符).因此在批处理操作中,这些名称作为2个参数传递.那些线不起作用.所以我想用"_"重命名""以克服这个问题.

例:

process/MyDirectory/Ola和Me/Private/TopSecretPictures/

这给出了错误.下面的一个工作正常

process/MyDirectory/Ola和Me/Private/TopSecretPictures

我的目标是:转换| Ola和我| >> | Ola_And_Me递归

:)

提前致谢 ..

sys*_*USE 6

以下脚本以递归方式重命名所有文件和目录,从给定目录开始,将空格转换为下划线.

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
Run Code Online (Sandbox Code Playgroud)

用法:

spaces_to_underscores "My Directory"
Run Code Online (Sandbox Code Playgroud)

鉴于此目录结构

My Directory
    Ola and Me
        Private
            TopSecretPictures
Run Code Online (Sandbox Code Playgroud)

它会将文件夹" 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".这里没有"撤消"功能.确保你有备份.