Jak usunąć niektóre znaki lub zastąpić niektóre znaki innymi znakami przez niektóre pliki wsadowe, w przypadku plików wszystkich plików w folderze systemu Windows za jednym razem, czy jest tam polecenie DOS dla tego?Zamień lub usuń określone znaki z nazw plików wszystkich plików w folderze
Odpowiedz
Użyj programu PowerShell, aby zrobić coś mądrzejszego w celu uzyskania zachęty systemu DOS. Tutaj pokazałem, jak grupować nazwy wszystkich plików i katalogów w bieżącym katalogu, które zawierają spacje, zastępując je podkreśleniami _
.
Dir |
Rename-Item -NewName { $_.Name -replace " ","_" }
Edycja:
Ewentualnie polecenie Where-Object
mogą być stosowane do filtr nie kwalifikują się do kolejnych obiektów cmdletu (polecenia-let). Poniżej przedstawiono kilka przykładów ilustrujących elastyczność może pozwolić Ci:
aby pominąć żadnych plików dokumentów
Dir | Where-Object { $_.Name -notmatch "\.(doc|xls|ppt)x?$" } | Rename-Item -NewName { $_.Name -replace " ","_" }
Aby przetwarzać tylko katalogi (pre-wersja 3.0)
Dir | Where-Object { $_.Mode -match "^d" } | Rename-Item -NewName { $_.Name -replace " ","_" }
PowerShell v3.0 wprowadził nowe flagi
Dir
. Możesz także użyć tamDir -Directory
.Aby pominąć żadnych plików już zawierających podkreślenia (lub jakiś inny znak)
Dir | Where-Object { -not $_.Name.Contains("_") } | Rename-Item -NewName { $_.Name -replace " ","_" }
Polecam dla tego polecenia rename
. Wpisz ren /?
w wierszu poleceń, aby uzyskać dodatkową pomoc.
Ten plik wsadowy może pomóc, ale ma pewne ograniczenia. Nazwa pliku = i% nie może być zastąpiona (wyjście z pamięci tutaj) i^w nazwach plików również może być problemem.
W tej części %newname: =_%
na każdej linii w dolnej części bloku zastępuje znak po :
z charakterem po =
tak jak ona stoi banda bohaterów zostaną zastąpione podkreślenia.
Usuń echo
, aby aktywować polecenie ren, ponieważ będzie ono jedynie drukować polecenia w oknie konsoli, dopóki tego nie zrobisz.
Przetworzy tylko bieżący folder, chyba że dodasz /s
do części polecenia DIR, a następnie przetworzy wszystkie foldery pod bieżącym folderem.
Aby usunąć określoną postać, usuń znak po znaku =. W %newname:z=%
taki wpis usunie wszystkie znaki z (wielkość liter nie ma znaczenia).
@echo off
for /f "delims=" %%a in ('dir /a:-d /o:n /b') do call :next "%%a"
pause
GOTO:EOF
:next
set "newname=%~nx1"
set "newname=%newname: =_%"
set "newname=%newname:)=_%"
set "newname=%newname:(=_%"
set "newname=%newname:&=_%"
set "newname=%newname:^=_%"
set "newname=%newname:$=_%"
set "newname=%newname:#=_%"
set "newname=%newname:@=_%"
set "newname=%newname:!=_%"
set "newname=%newname:-=_%"
set "newname=%newname:+=_%"
set "newname=%newname:}=_%"
set "newname=%newname:{=_%"
set "newname=%newname:]=_%"
set "newname=%newname:[=_%"
set "newname=%newname:;=_%"
set "newname=%newname:'=_%"
set "newname=%newname:`=_%"
set "newname=%newname:,=_%"
echo ren %1 "%newname%
komenda A one-liner w Windows PowerShell do usunięcia lub zmiany nazwy niektórych znaków będzie jak poniżej.(Tutaj spacje jest zastąpiony podkreślenia)
Dir | Rename-Item –NewName { $_.name –replace " ","_" }
Odpowiedzi PowerShell są dobre, ale polecenie Zmień nazwę-Item nie działa w tym samym katalogu docelowego, chyba że wszystkie pliki mają niepożądany charakter w nich (nie powiedzie się, jeśli znajdzie duplikaty).
Jeśli jesteś podobny do mnie i miał mieszankę dobrych i złych nazw imion, spróbuj zamiast tego skryptu (zastąpi przestrzenie z podkreśleniem):
Get-ChildItem -recurse -name | ForEach-Object { Move-Item $_ $_.replace(" ", "_") }
To rozwiązanie sprawdziło się (jako że przyjęta odpowiedź spowodowałaby błędy, przypuszczam, że z powodu kilku plików nie zawierających znaku, który ma zostać zastąpiony, jak wspomniałeś). +1, Byłbym wspaniale mieć trochę więcej wyjaśnień na temat flagi '-Recurse' i' Move-Item' w tym kontekście. – j4v1
co jest użycie 'którym aktualnie Object'. [Odpowiedź aphoe] (http://stackoverflow.com/a/23555996/1275574) zrobić to samo bez 'Where-Object' – AminM
@JesonPark Dzięki za wskazanie tego. Dodałem kilka lepszych przykładów użycia 'Where-Object'. –
Zmień nazwę elementu: Ścieżka źródłowa i docelowa musi być inna. error:/ –