
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°.txt
in degree.txt
.
ø wird verwendet, weil es Unicode ist U+00F8
. Das Gradsymbol befindet sich 0xF8
in 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.