windows下批次刪除檔案名稱中的特殊字符

windows下批次刪除檔案名稱中的特殊字符

我對批次腳本非常陌生。

有與此相關的解決方案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°.txtdegree.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' *

您可能需要稍微嘗試一下,我只是從我的一個專案中花了幾分鐘來發布此內容。請分享您的結果。

相關內容