Batch file to replace special characters in subfolder in windows

时间:2017-08-05 12:04:58

标签: batch-file

@echo off

FOR /f "delims=" %%G IN ('dir /a-d /b /s /o-n ^|sort /r') DO (
   setlocal enabledelayedexpansion
   pushd "%%~dpG"
   SET Var=%%~nfG
   SET Var=!Var: =_!
   SET Var=!Var:[=_!
   SET Var=!Var:]=_!
   SET Var=!Var:(=_!
   SET Var=!Var:)=_!
   SET Var=!Var:,=_!
   SET Var=!Var:'=_!
   rename "%%~nfG" "!Var!"
   popd
   endlocal
)

Not working getting error in prompt like

_! was unexpected at this time.

Can anyone answer or correct this plz.enter code here

2 个答案:

答案 0 :(得分:0)

此外,我会在尝试重命名之前比较名称是否已更改:

:: Q:\Test\2017\08\05\SO_45521689.cmd
@echo off

FOR /f "delims=" %%G IN (
  'dir /a-d /b /s /o-n ^|findstr "[,'()\[\]]"^|sort /r'
) DO (
   setlocal enabledelayedexpansion
   pushd "%%~dpG"
   SET "Var=%%~nfG"
   SET "Var=!Var: =_!"
   SET "Var=!Var:[=_!"
   SET "Var=!Var:]=_!"
   SET "Var=!Var:(=_!"
   SET "Var=!Var:)=_!"
   SET "Var=!Var:,=_!"
   SET "Var=!Var:'=_!"
   if "%%~nfG" neq "!Var!" rename "%%~nfG" "!Var!"
   popd
   endlocal
)

答案 1 :(得分:0)

SET Var=!Var:)=_!
rem          ↑      this closing parenthesis closes the `... DO ()` code block.

使用

SET "Var=!Var:)=_!"

SET Var=!Var:^)=_!

此外,you cannot specify a drive or path for rename target。使用SET "Var=%%~nxG"代替SET Var=%%~nfG

如果文件名包含任何感叹号,请注意您的脚本使用>

以下脚本应该禁用延迟扩展的作业。请注意,操作rename命令仅用于ECHO以进行调试。

@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
rem choose initial directory
pushd "D:\bat\Unusual Names"
FOR /f "delims=" %%G IN ('dir /a-d /b /s /o-n') DO (
   SET "_FFN=%%~fG"                                    File Full Name
   SET "Var=%%~nxG"                                    File Name + Extension
   call :renaming
)
popd
ENDLOCAL
goto :eof

:renaming
   SET "Var=%Var: =_%"
   SET "Var=%Var:[=_%"
   SET "Var=%Var:]=_%"
   SET "Var=%Var:(=_%"
   SET "Var=%Var:)=_%"
   SET "Var=%Var:,=_%"
   SET "Var=%Var:'=_%"
   ECHO rename "%_FFN%" "%Var%"
goto :eof