Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

dateiname vorne abschneiden

Frage Entwicklung Batch & Shell

Mitglied: jazzman

jazzman (Level 1) - Jetzt verbinden

13.06.2008, aktualisiert 14.06.2008, 8481 Aufrufe, 3 Kommentare

da gibt es bestimmt eine ganz einfache lösung

hallo,

ich lege gerade eine filmdatenbank an. dazu sortiere ich filmkritiken aus txt dateien in ordner, welche nach regisseuren und filmen benannt sind.
die ausgangsdatei ist immer "nachname - filmtitel.txt" (eine ordnung ist also da).
ich möchte diese datei nun vom ausgangsverzeichnis ins regisseurverzeichnis verschieben und dabei vorne einfach den nachnamen abschneiden (denn der steht ja schon im ordner).

mehrere filme vom selben regisseur sollen in ein verzeichnis verschoben werden.
im ausgangsordner sind z.b.:
3 filme von jarmusch
3 filme von godard

ich stell mir das automatische verschieben so vor:

"c:\rezensionen\jarmusch - down by law (1986).txt" -> "h:\filme\jim jarmusch\down by law (1986).txt"
"c:\rezensionen\jarmusch - mystery train (1989).txt" -> "h:\filme\jim jarmusch\mystery train (1989).txt"
"c:\rezensionen\jarmusch - night on earth (1991).txt" -> "h:\filme\jim jarmusch\night on earth (1991).txt"

"c:\rezensionen\godard - vivre sa vie (1962).txt" -> "h:\filme\jean-luc godard\vivre sa vie (1962).txt"
"c:\rezensionen\godard - bande a part (1964).txt" -> "h:\filme\jean-luc godard\bande a part (1964).txt"
"c:\rezensionen\godard - alphaville (1965).txt" -> "h:\filme\jean-luc godard\alphaville (1965).txt"

den move befehl hab ich verstanden. aus anderen umbenennungsthreads bin ich nicht sonderlich schlau geworden, weil da nicht allzuviel erklärt wird und die leute hinten was loswerden wollen.
ich brauch aber vorn was knackiges zum abschneiden und die möglichkeit es nachvollziehen zu können, wäre natürlich auch nicht schlecht.

beste grüsse
Mitglied: Biber
13.06.2008 um 18:53 Uhr
Moin jazzman,

willkommen im Forum.

Bei Deiner Anforderung gibt es das kleine Problem, dass bei der Moverei das Skriptchen auch noch ermitteln soll, dass der Quell-Dateinamensteil "godard" in das Zielverzeichnis "jean-luc godard" gehört.

Wenn es für Dich vertretbar ist, dass diese Unterverzeichnisse unterhalb vom Ziel (bei Dir ist das "h:\filme") bereits angelegt sind, dann ginge es mit einem Oneliner vom CMD-Prompt.

Da ich Dir die Tipperei nicht zumuten will, habe ich es in einen Batch gepackt.
01.
::---Snipp MoveRezensionen.cmd 
02.
@FOR %%a in ("c:\rezensionen\*.txt") do @( 
03.
  FOR  /f "tokens=1,* delims=- " %%i in ("%%~nxa") do @( 
04.
    For /d %%z in ("h:\filme\*%%i*") do @( 
05.
    echo Move "%%a" "%%~z\%%j" 
06.
)))  
Anstarten würde ergeben:
01.
>e:\work\MoveRezensionen.cmd 
02.
Move "c:\rezensionen\godard - bande a part (1964).txt" "h:\filme\jean-luc godard\bande a part (1964).txt" 
03.
Move "c:\rezensionen\jarmusch - down by law (1986).txt" "h:\filme\jim jarmusch\down by law (1986).txt"
Wenn das passt, dann nimm das "echo" raus aus dem Batch - dann moved er wirklich.
Gute Nachricht: wenn Du das "echo" rausnimmst, dann ist der Schnipsel auch nicht mehr so lang.

Grüße
Biber

P.S. Wenn es sein muss, werde ich auch kommentieren.
Aber bitte versuch erst, gedanklich den drei FOR-Anweisungen und ihren Variablen zu folgen
  • %%a durchläuft alle *.txt-Dateinamen in Quelle c:\rezensionen
  • %%i ist nur eine FOR/F-Textzerlege- Variable... für den Dateinamen
  • %%z ermittelt aus der Liste der Unterverzeichnisse in h:\filme das Passende.

P.P.S. Geschmack hast Du ja... für "Unterm Dirndl wird gejodelt" hätte ich das nicht getan.
Bitte warten ..
Mitglied: jazzman
14.06.2008 um 13:10 Uhr
hammer!!!!!!!!!!
ja die unterverzeichnisse sind da und es klappt wie am schnürchen. ich kann sogar neue regisseure mit reinnehmen und die werden erkannt - meisterlich gelöst biber!
und das in einer geschwindigkeit, die ihresgleichen sucht.

wenn du mal in leipzig bist, komm doch in mein kino, da liegt schon ne freikarte für dich bereit.

ps: FOR /f "tokens=1,* delims=- " %%i in ("%%~nxa") do @(
warum muss ich einen token ziehen? wird bei delims was getrennt? ~nxa ist mir auch schleierhaft? die restzeilen sind klar!

pps: zum glück hast du nicht auf die rechtschreibung bei rezensionen geschaut
Bitte warten ..
Mitglied: Biber
14.06.2008 um 17:40 Uhr
Moin jazzman,

freut mich, dass es klappt... und die Kinokarte hole ich auch ab, wenn in Leipzig bin, versprochen.

Zu der Zeile: FOR /f "tokens=1,* delims=- " %%i in ("%%~nxa") do @(

Mein Vorgehen war folgendes:
  • "c:\rezensionen\godard - vivre sa vie (1962).txt" ==> steht in der Variablen %%a
  • "godard - vivre sa vie (1962).txt" ==> Von %%a nur Name und eXtension %%~nxa
  • "godard" ==> erstes Token/Token 1 bei FOR /f "tokens=1,* delims=- "
  • " - " ==> die Delimiter selbst ("delims=- ") werden quasi ausgeblendet
  • "vivre sa vie (1962).txt" ==> das ist der "Rest", in dieser Syntax "tokens=1,*" als "*" beschrieben.
  • "Token1" wird als %%i und "Token Rest" als %%j weitergereicht.

Insgesamt lautete also diese FOR /F-Anweisung:
Teile mir die Input-Zeile auf in das erste Token und den ganzen Rest unter der Auflage, dass die Trennzeichen in dieser Zeile nur Bindestrich und Leerzeichen sind.

Liebe Grüße nach Leipzschg
Biber

P.S. Ich hätte mich an diesen Oneliner nie rangetraut, wenn Du nicht geschrieben hättest: "da gibt es bestimmt eine ganz einfache lösung"
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...

Server-Hardware
Lenovo Server System X 3650 M5 Festplatten (9)

Frage von Hendrik2586 zum Thema Server-Hardware ...