У меня есть папка, содержащая несколько сотен подпапок в формате Name, ID
. Каждая из этих папок содержит несколько подпапок, некоторые из которых содержат пробелы в своих именах. Я хотел бы переименовать только подпапки, а не родительские папки, заменив пробелы подчеркиванием, например, C:\Location\John, 1234\My Documents
на C:\Location\John, 1234\My_Documents
.
Я попытался изменить фрагмент скрипта, который обнаружил здесь, ноэто также меняет родительскую папку
Вот неотредактированный код:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "StartFolder=C:\Tydelik"
cd /D %SystemRoot%
set "RenameError="
rem Rename all folders containing at least one space character in folder name.
for /F "delims=" %%I in ('dir "%StartFolder%\* *" /AD /B /S 2^>nul') do call :RenameFolder "%%I"
if defined RenameError echo/& pause
rem Restore initial environment and exit this batch file.
endlocal
goto :EOF
:RenameFolder
set "NewFolderName=%~nx1"
set "NewFolderName=%NewFolderName: =_%"
set "FolderPath=%~dp1"
if not exist "%FolderPath%" set "FolderPath=%FolderPath: =_%"
set "FullFolderName=%FolderPath%%~nx1"
if not exist "%FullFolderName%\" set "RenameError=1" & goto :EOF
for %%J in ("%FullFolderName%") do set "FolderAttributes=%%~aJ"
if "%FolderAttributes:~3,1%" == "h" %SystemRoot%\System32\attrib.exe -h "%FullFolderName%"
ren "%FullFolderName%" "%NewFolderName%" 2>nul
if errorlevel 1 goto ErrorFolderRename
if "%FolderAttributes:~3,1%" == "h" %SystemRoot%\System32\attrib.exe +h "%FolderPath%%NewFolderName%"
goto :EOF
:ErrorFolderRename
echo Error renaming folder "%FullFolderName%"
set "RenameError=1"
if "%FolderAttributes:~3,1%" == "h" %SystemRoot%\System32\attrib.exe +h "%FullFolderName%"
goto :EOF
Как я уже сказал, ожидаемый результат для каждой подпапки должен быть C:\Location\John, 1234\My_Documents
вместо C:\Location\John, 1234\My Documents
. В настоящее время с кодом, который я имею, я получаю C:\Tydelik\John,_1234\My_Documents
.