Hallo,
von Batch-Scripting mit der CMD.EXE halte ich ehrlich gesagt nichts mehr. Da du Win 7 hast, hast du die Powershell. Bietet wesentlich mehr Möglichkeiten (und meist auch einfacher, weil auch besser "lesbar").
Beispiel zu deiner Anforderung (Langform):
Get-ChildItem "X:\Verzeichnis\Test.csv" | ForEach-Object { Rename-Item $_ ((Get-Content $_ -TotalCount 1).Split(",")[41] + "-" + $_.Name) -WhatIf }
Schreibweise mit Abkürzungen (bin normalerweise schreibfaul ;o)
gci "X:\Verzeichnis\Test.csv" | % { rni $_ ((gc $_ -TotalCount 1).Split(",")[41] + "-" + $_.Name) -WhatIf }
Kurze Erklärung:
Get-ChildItem "X:\Verzeichnis\Test.csv" holt sich das Dateiobjekt.
Mit der Pipe | wird es an den nächsten Befehl übergeben.
ForEach-Object { ... } führt die gewünschten Aktionen (zwischen den Klammern) für das/die übergebene(n) Objekt(e) aus.
Rename-Item... klar.
"$_" ist dabei das übergebene Objekt (die Datei).
Get-Content $_ -TotalCount 1
Liest die erste Zeile der Datei aus.
.Split(",")[41]
Erzeugt ein Array mit den einzelnen Teilstrings der Zeile (das Komma wird dabei als Trennzeichen angesehen) und gibt mit der Angabe [41] den 42. Teilstring aus (da die Zählung bei 0 beginnt!).
$_.Name ist der Originalname der Datei und mittels
...+ "-" +... wird der neue Name (hier mit Bindestrich dazwischen) zusammengesetzt.
Hier also "InhaltderSpalte42-Originalname". Das + "-" (Bindestrich) kann man natürlich weglassen oder irgendwas anderes nehmen.
Wichtig!
Mit dem Parameter
-WhatIf ("was ist, wenn") wird der Befehl nur getestet und nicht wirklich ausgeführt. Sehr gut zum Probieren, um erstmal gefahrlos zu schauen, was passieren
würde.
Um den Befehl dann wirklich auszuführen, einfach das "-WhatIf" entfernen (aber nicht die letzte Klammer!).
PS:
Will man das Ganze gleich mit
allen CSV-Dateien im Verzeichnis machen, dann z.B. so:
gci "X:\Verzeichnis\*.csv" | % { rni $_ ((gc $_ -TotalCount 1).Split(",")[41] + "-" + $_.Name) -WhatIf }
Hoffe, es sind keine Fehler drin. Habs aber eigentlich getestet.
mfg, Massaraksch