2009-05-01 6 views

Antwort

1

Wenn Sie Zugriff auf einen Windows-Shell haben, können Sie verwenden:

@echo off 
setlocal EnableDelayedExpansion 

REM loop over all files in the cwd 
for /f %%a in ('dir /a-d /b') do (
    REM store this filename in a variable so we can do substringing 
    set ThisFileName=%%a 
    REM now take a substring 
    set ThisShortFileName=!ThisFileName:~0,255! 
    REM finally, the rename: 
    echo ren %%a !ThisShortFileName! 
) 


:EOF 
endlocal 

(Anmerkung: Ich habe ein Echo vor dem Umbenennungsbefehl hinzugefügt nur so können Sie visuell überprüfen, dass es, bevor sie tatsächlich funktioniert es läuft. Arbeiten auf meine Box.)

ich bin sicher, dass jemand, der gerade auf einem * nix-Box könnte ein ähnliches Skript für bash machen, aber ich bin in Windows-Welt stecken :)

Viel Glück !

+0

Das funktionierte, aber ich musste die Dateinamen noch kürzer machen, da die Verzeichnisse auf die 255 Zeichen angerechnet wurden. –

0
$ cat truncname 
#!/bin/bash 
# requires basename, dirname, and sed 
mv $1 `dirname $1`/`basename $1 | sed 's/^\(.\{0,255\}\).*/\1/'` 
$ chmod a+x truncname 
$ find . -exec ./truncname {} \; 
+0

Ich habe versucht, den Shell-Skript auf einem Ordner ausgeführt und bekam folgende Fehlermeldung: Aufforderung:/media/DUALOS $ sh ~/truncname.sh Sachen /home/username/truncname.sh: 1: $: nicht gefunden mv: kann 'stuff 'nicht in ein Unterverzeichnis von sich selbst verschieben,' ./stuff/stuff' /home/username/truncname.sh: 5: $: nicht gefunden /home/username/truncname.sh: 6: $ : nicht gefunden –

1

Unter der Annahme, dass die Schale in dem NTFS-Verzeichnis sitzt, wie es PWD ist:

for f in *; do mv $f ${f:0:255}; done

ähnlich wie Daves sed basierte Version, vermeidet aber eine exec pro Datei. Wird aufgrund des maximalen Befehlslimits auf ein wirklich riesiges Verzeichnis aufblasen und macht keine Unterverzeichnisse.

Verwandte Themen