2013-05-19 16 views

Odpowiedz

69

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ć tam Dir -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 " ","_" } 
    
+0

co jest użycie 'którym aktualnie Object'. [Odpowiedź aphoe] (http://stackoverflow.com/a/23555996/1275574) zrobić to samo bez 'Where-Object' – AminM

+1

@JesonPark Dzięki za wskazanie tego. Dodałem kilka lepszych przykładów użycia 'Where-Object'. –

+3

Zmień nazwę elementu: Ścieżka źródłowa i docelowa musi być inna. error:/ –

-2

Polecam dla tego polecenia rename. Wpisz ren /? w wierszu poleceń, aby uzyskać dodatkową pomoc.

6

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% 
26

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 " ","_" } 
+0

Byłem w stanie szybko zmienić nazwę pęczka plików w folderze, dzięki! – abjbhat

+0

Cieszę się, że mogłem pomóc. – aphoe

+2

Zmień nazwę pozycji: Ścieżka źródłowa i docelowa musi być inna. błąd:/ –

6

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(" ", "_") } 
+0

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