
我對批次腳本非常陌生。
有與此相關的解決方案Linux 和 MacOS,但我需要它用於 Windows。
我有以下內容,僅適用於特殊字元! @#$%^&*~ 等,基本上是您可以在鍵盤上看到的字元。 但我需要刪除特殊字符,例如 和 °。以下腳本不適用於這兩個特定字元。,我可以透過 cmd 運行的腳本。有這但它不相容於winows7 cmd。
@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *#*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:#=!"
ren "!fname!" "!nname!"
endlocal
)
以下只能刪除檔案名稱中的空格
@echo off
setlocal disableDelayedExpansion
if /i "%~1"=="/R" (
set "forOption=%~1 %2"
set "inPath="
) else (
set "forOption="
if "%~1" neq "" (set "inPath=%~1\") else set "inPath="
)
for %forOption% %%F in ("%inPath%* *") do (
if /i "%~f0" neq "%%~fF" (
set "folder=%%~dpF"
set "file=%%~nxF"
setlocal enableDelayedExpansion
echo ren "!folder!!file!" "!file: =!"
ren "!folder!!file!" "!file: =!"
endlocal
)
)
答案1
如果您處理代碼頁 437 必須用於您的腳本這一事實,那麼您的第一個腳本對我有用。
將以下腳本貼到記事本中。儲存為 ANSI 編碼的 test.bat。
@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *ø*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:ø=!"
ren "!fname!" "!nname!"
endlocal
)
上面的腳本將重命名degree°.txt
為degree.txt
.
使用 ø 因為它是 Unicode U+00F8
。度數符號位於0xF8
代碼頁 437 中。
 沒有出現在代碼頁 437 中,因此我不知道平行解決方案。可能需要按照此答案中的指示更改代碼頁正確地做這件事。這是對包含更改程式碼頁的批次檔的嘗試。
echo Ignore the error displayed below
@echo off &setlocal
chcp 65001>nul
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *Â*.txt') do (
set "fname=%%~a"
setlocal enabledelayedexpansion
set "nname=!fname:Â=!"
ren "!fname!" "!nname!"
endlocal
)
將以上內容貼到記事本文件中,並使用編碼 UTF-8 儲存。有必要包含腳本的第一行,因為批次檔在最初處理 UTF-8 檔案時會給出錯誤。
答案2
希望我能為此獲得榮譽,但這是我偶然發現的。我找不到我找到的帖子,所以這是憑記憶的。
find . -depth -name "*" -print0 | $var -0 sed -i 's/[:cntrl:]/_/g' *
您可能需要稍微嘗試一下,我只是從我的一個專案中花了幾分鐘來發布此內容。請分享您的結果。