Wie entferne ich Leerzeichen (nicht durch Unterstriche ersetzen) aus mehreren tausend Dateien unter Windows? Kann ich das über den DOS-Befehl tun?
Zur Zeit:
file one.mp3
file two.mp3
Alle Dateien müssen werden:
fileone.mp3
filetwo.mp3
Hier ist ein Skript, das Dateien effizient umbenennen kann und dabei alle Leerzeichen vom Namen entfernt.
:renameNoSpace [/R] [FolderPath]
@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
)
)
Angenommen, das Skript heißt renameNoSpace.bat
renameNoSpace
: (keine Argumente) Benennt Dateien im aktuellen Verzeichnis um
renameNoSpace /R
: Benennt Dateien in der Ordnerstruktur um, die sich im aktuellen Verzeichnis befindet
renameNoSpace myFolder
: Benennt Dateien im Verzeichnis "myFolder" um, das sich im aktuellen Verzeichnis befindet.
renameNoSpace "c:\my folder\"
: Benennt Dateien im angegebenen Pfad um. Anführungszeichen werden verwendet, weil Pfad ein Leerzeichen enthält.
renameNoSpace /R c:\
: Benennt alle Dateien auf dem Laufwerk C: um.
Erstellen Sie eine Powershell-Datei mit der Erweiterung *.ps1
Schreiben Sie diesen Code:
dir |
Where-Object { $_.name.Contains(" ") } |
Rename-Item -NewName { $_.name -replace " ","" }
speichern, dann Rechtsklick -> mit Powershell ausführen
@echo off
setlocal enableextensions enabledelayedexpansion
for %%f in (*.*) do (
set ARG=%%~nxf
rename "%%f" !ARG: =!
)
Sie können ein einfaches Skript schreiben, das dies für eine Datei/ein Verzeichnis ausführt, z. B .:
@echo off
setlocal enableextensions enabledelayedexpansion
set "ARG=%~1"
ren "%ARG%" "%ARG: =%"
... und wenn Sie möchten, führen Sie es über alle Dateien und/oder Verzeichnisse, die Sie interessieren. Wenn Sie beispielsweise das obige Skript als myrenamingscript.cmd erstellen, können Sie es über alle Nicht-Verzeichnisdateien im aktuellen Verzeichnis ausführen, indem Sie Folgendes ausführen:
for %f in (*) do @myrenamingscript.cmd "%~f"
In Windows:
Das Problem, mit dem ich konfrontiert wurde, ist, dass möglicherweise bereits eine Datei mit dem Namen existiert, den Sie der neuen Datei geben wollen (z. B. wenn sich 2 Dateien im Ordner "file one.txt" und "file_one.txt" befinden msgstr "Wenn Sie versuchen, die Leerzeichen durch Unterstriche zu ersetzen, wird eine Datei die andere ersetzen. Also habe ich dieses Skript erstellt, das prüft, ob der neue Name bereits vorhanden ist, und wenn dies der Fall ist, wird eine Nummer an das Ende des Dateinamens angehängt (fügt der Nummer 1 hinzu, bis es keine andere Datei mit diesem Namen gibt). Anweisungen darüber, was geändert werden muss, befinden sich oben (empfohlene Zeilen). Speichern Sie die Stapeldatei nicht in demselben Ordner, in dem Sie die Dateien umbenannt haben, wenn Sie die Option *. * Verwenden. Ich hoffe das hilft.
@echo off
REM Instructions
REM This script repaces spaces from file names with underscores.
REM If you want to just remove the spaces uncomment lines 30 and 52 and comment out the lines 29 and 51.
REM set the following parameters.
REM pb is the folder containing the files we want to rename (fullpath)
REM tm is a temporary folder that will be created and deleted. Just put a folder that does not exist and is not used by anything else (fullpath).
REM all is the file type you want to raname. E.g. *.* for every file, *.txt for TXTs, *.pdf for PDFs etc
REM you don't have to change anything else
set pb=<folder containing the files to rename>
set tm=<a temp folder that does not exist>
set all=*.*
set pa=%pb%%all%
setlocal EnableDelayedExpansion
cd /d %pa%
set /a count=1
if not exist %tm% mkdir %tm%
for /f %%F in (%pa%) do (
set name=%%~nF
set name2=!name: =_!
REM set name2=!name: =!
set name3=!name2!%%~xF
if !name2! == %%~nF (
move /y %%~dpF\!name3! %tm%\ >nul
) else (
if not exist %%~dpF\!name3! (
if not exist %tm%\!name3! (
ren "%%F" "!name3!"
move /y %%~dpF\!name3! %tm%\ >nul
)
)
)
)
:rename
for /f %%F in (%pa%) do (
set name=%%~nF
set name2=!name: =_!
REM set name2=!name: =!
set name4=!name2!%count%
set name3=!name4!%%~xF
if !name2! == %%~nF (
move /y %%~dpF\!name3! %tm%\ >nul
) else (
if not exist %%~dpF\!name3! (
if not exist %tm%\!name3! (
ren "%%F" "!name3!"
move /y %%~dpF\!name3! %tm%\ >nul
)
)
)
)
set /a count = %count% + 1
set /a loop = 0
for %%F in (%pa%) do (set /a loop = 1)
if %loop% equ 1 goto rename
move /y %tm%\%all% %pb% >nul
rmdir /s /q %tm%