Stapelweises Entfernen von Sonderzeichen aus Dateinamen in Windows

Stapelweises Entfernen von Sonderzeichen aus Dateinamen in Windows

Ich bin ein völlig neuer Mensch im Bereich Batch-Scripting.

Es gibt Lösungen hierzu fürLinux und macOS, aber ich brauche es für Windows.

Ich habe Folgendes, was nur mit Sonderzeichen !@#$%^&*~ usw. funktioniert, also im Grunde mit denen, die Sie auf Ihrer Tastatur sehen. Aber ich muss Sonderzeichen wie  und ° entfernen. Die folgenden Skripte funktionieren bei diesen beiden spezifischen Zeichen nicht., ein Skript, das ich über cmd ausführen kann. Es gibtDasaber es ist nicht Windows 7-CMD-kompatibel.

@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
)

Und das Folgende kann nur Leerzeichen in Dateinamen entfernen

@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
  )
)

Antwort1

Ihr erstes Skript hat bei mir funktioniert, wenn Sie damit rechnen, dass für Ihr Skript die Codepage 437 verwendet werden muss.

Fügen Sie das folgende Skript in den Editor ein. Speichern Sie es als test.bat mit ANSI-Kodierung.

@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
)

Das obige Skript wird umbenannt degree°.txtin degree.txt.

ø wird verwendet, weil es Unicode ist U+00F8. Das Gradsymbol befindet sich 0xF8in Codepage 437.

 erscheint nicht in Codepage 437, daher ist mir keine parallele Lösung bekannt. Es ist wahrscheinlich erforderlich, umändern Sie die Codepage wie in dieser Antwort beschriebenum es richtig zu machen. Hier ist ein Versuch einer Batchdatei, die das Ändern der Codepage beinhaltet.

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
)

Fügen Sie das Obige in eine Notepad-Datei ein und speichern Sie es mit der Kodierung UTF-8. Es ist notwendig, die erste Zeile des Skripts einzuschließen, da die Batchdatei beim ersten Verarbeiten der UTF-8-Datei einen Fehler ausgibt.

Antwort2

Ich wünschte, ich könnte das Verdienst dafür beanspruchen, aber ich bin zufällig darauf gestoßen. Ich kann den Beitrag, in dem ich es gefunden habe, nicht finden, also ist das aus dem Gedächtnis.

find . -depth -name "*" -print0 | $var -0 sed -i 's/[:cntrl:]/_/g' *

Möglicherweise müssen Sie ein wenig damit herumspielen, ich nehme mir nur ein paar Minuten Zeit von einem meiner Projekte, um dies zu posten. Teilen Sie bitte Ihre Ergebnisse mit.

verwandte Informationen