Batch-Problem - Dateiname zu lang zum Verschieben
Hallo,
ich habe folgendes Problem:
In einem Ordner der Form S:\Misc\Statistik-Archiv\000 Testdateien kommen regelmäßig Dateien an, die dann in einen entsprechenden Unterordner verschoben werden sollen.
Der Unterordner ist S:\Misc\Statistik-Archiv\000 Testdateien\123456789 File - ABCglobal Land abcdefghijklmno & abcdefghijklmn Inhalt ...so ungefähr :o) auf jeden Fall mit dieser Länge.
Die Dateien haben die Form
ABCglobal_Land_abcdefghijklmno_abcdefghijklmn_Inhalt/_123456789_File_20090118_180536, wobei das Rote am Schluss ein Zeitstempel ist, der von Datei zu Datei verschieden ist.
Bei anderen Dateien mit kürzerem Namen bzw. Unterordner, in den sie rein sollen, geht das Verschieben mit einem Batch-File problemlos. Bei längeren kommt aber die Fehlermeldung "The filename or extension is too long". Ich habe überlegt, dass man vielleicht in einer FOR-Schleife den Dateinamen erstmal in einen kürzeren umbenennen könnte, diese umbenannte Datei in den Unterordner verschieben und dort die Datei wieder in die ursprüngliche Bezeichnung zurückbenennen. Das krieg ich aber irgendwie nicht hin :o(
Kann mir vielleicht jemand von Euch helfen? Bin noch nicht so .bat-erprobt.
Ach ja, um eventuellen Fragen gleich zuvorzukommen:
Die Datei- und Ordnernamen können nicht geändert werden, und es muss auf jeden Fall ein .bat-File sein.
Ich hoffe, ich habe das Problem einigermaßen verständlich beschrieben...
Bin für jeden Hinweis dankbar!
ich habe folgendes Problem:
In einem Ordner der Form S:\Misc\Statistik-Archiv\000 Testdateien kommen regelmäßig Dateien an, die dann in einen entsprechenden Unterordner verschoben werden sollen.
Der Unterordner ist S:\Misc\Statistik-Archiv\000 Testdateien\123456789 File - ABCglobal Land abcdefghijklmno & abcdefghijklmn Inhalt ...so ungefähr :o) auf jeden Fall mit dieser Länge.
Die Dateien haben die Form
ABCglobal_Land_abcdefghijklmno_abcdefghijklmn_Inhalt/_123456789_File_20090118_180536, wobei das Rote am Schluss ein Zeitstempel ist, der von Datei zu Datei verschieden ist.
Bei anderen Dateien mit kürzerem Namen bzw. Unterordner, in den sie rein sollen, geht das Verschieben mit einem Batch-File problemlos. Bei längeren kommt aber die Fehlermeldung "The filename or extension is too long". Ich habe überlegt, dass man vielleicht in einer FOR-Schleife den Dateinamen erstmal in einen kürzeren umbenennen könnte, diese umbenannte Datei in den Unterordner verschieben und dort die Datei wieder in die ursprüngliche Bezeichnung zurückbenennen. Das krieg ich aber irgendwie nicht hin :o(
Kann mir vielleicht jemand von Euch helfen? Bin noch nicht so .bat-erprobt.
Ach ja, um eventuellen Fragen gleich zuvorzukommen:
Die Datei- und Ordnernamen können nicht geändert werden, und es muss auf jeden Fall ein .bat-File sein.
Ich hoffe, ich habe das Problem einigermaßen verständlich beschrieben...
Bin für jeden Hinweis dankbar!
Please also mark the comments that contributed to the solution of the article
Content-Key: 106483
Url: https://administrator.de/contentid/106483
Printed on: April 19, 2024 at 22:04 o'clock
11 Comments
Latest comment
Hallo Ela1076 und willkommen im Forum!
Ein probates Mittel in solchen Fällen ist ein
Da Du in weiterer Folge für diesen Ordner nur noch "X:\" schreiben musst, hast Du schon einiges an Pfadlänge eingespart. Am Ende des Batches kann dann der Laufwerksbuchstabe mit
wieder frei gegeben werden.
Trotzdem Du schon angemerkt hast, dass eine Änderung der Pfade / Dateinamen nicht möglich wäre, stellt sich mir trotzdem die Frage nach der Sinnhaftigkeit des Ganzen - wie sollen denn diese Dateien dann in weiterer Folge verwendet werden?
Grüße
bastla
Ein probates Mittel in solchen Fällen ist ein
subst X: "S:\Misc\Statistik-Archiv\000 Testdateien"
subst X: /d
Trotzdem Du schon angemerkt hast, dass eine Änderung der Pfade / Dateinamen nicht möglich wäre, stellt sich mir trotzdem die Frage nach der Sinnhaftigkeit des Ganzen - wie sollen denn diese Dateien dann in weiterer Folge verwendet werden?
Grüße
bastla
Moin Ela1076,
willkommen im Forum.
idee: Strategiewechsel.
Ein REName-Befehl mit Wildcardzeichen geht fast immer in die Grütze, weil der CMD-Interpreter ihn etwas anders umsetzt als Du ihn meinst.
Suche konkreter nach den umzubenennenden Dateinamen und
behandle sie einzeln mit "REN eineDatei_Datum_Uhrzeit.xls XY_Datum_Uhrzeit.xls"
Und diese Wildcard "*_Datum_Uhrzeit." kannst Du formulieren als "_*_2009????_??????.xls'
Wenn Du also alle Dateien
Dann nimm folgenden Oneliner, den ich aus optischen Gründen als Batchdatei formatiert habe
Das letzte GROSS geschrieben ECHO dient nur zum Testen.
Wenn bei Dir nun erwartungsgemäß u.a. herauskommt:
--->dann kannst Du das ECHO weglassen und den Schnipsel abfeuern.
Grüße
Biber
willkommen im Forum.
Hat hier vielleicht jemand eine Idee?
Jepp... das ist eines der Markenzeichen dieses Forums.idee: Strategiewechsel.
Ein REName-Befehl mit Wildcardzeichen geht fast immer in die Grütze, weil der CMD-Interpreter ihn etwas anders umsetzt als Du ihn meinst.
Suche konkreter nach den umzubenennenden Dateinamen und
behandle sie einzeln mit "REN eineDatei_Datum_Uhrzeit.xls XY_Datum_Uhrzeit.xls"
Und diese Wildcard "*_Datum_Uhrzeit." kannst Du formulieren als "_*_2009????_??????.xls'
Wenn Du also alle Dateien
- ab Unterverzeichnis "S:\Misc\Statistik-Archiv\000 Testdateien" und darunter
- mit der Namenskonvention "_"+beliebigesGesülze+"2009mmtt_hhmmss.xls"
Dann nimm folgenden Oneliner, den ich aus optischen Gründen als Batchdatei formatiert habe
:: ---RenLongDatumUhrzeit.bat ---
Set "Startdir=S:\Misc\Statistik-Archiv\000 Testdateien"
@for /f "delims=" %%j in ('dir /b /s "%startdir%\*_2009????_??????.xls"') do @(
for /f "delims=_ tokens=1-9" %%a in ("%%~nxj") do @(
for /f "tokens=1,2" %%x in ("%%i %%h %%g %%f %%e %%d %%c %%b %%a") do @(
@ECHO ren "%%j" XY_%%y_%%x
)))
Wenn bei Dir nun erwartungsgemäß u.a. herauskommt:
....
ren "S:\Misc\Statistik-Archiv\000 Testdateien\ABCglobal_Land_abcdefghijklmno_abcdefghijklmn_Inhalt\_123456789_File_20090118_180536.xls" XY_20090118_180536.xls
....
Grüße
Biber
Moin Ela1076,
bitte als erstes: wechsele zum CMD-Prompt.
Per Starten über einen Explorer-Doppelklick kannst Du nicht sinnvoll testen.
Also bitte "Start"->"Ausführen"->cmd
Und dann eingeben:
...damit du überhaupt irgendetwas siehst.
Danach dann
und sollte DANN nix zu lesen sein, dann das "@echo off" in ein "@echo on" ändern.
Danach sehen wir weiter.
Grüße
Biber
bitte als erstes: wechsele zum CMD-Prompt.
Per Starten über einen Explorer-Doppelklick kannst Du nicht sinnvoll testen.
Also bitte "Start"->"Ausführen"->cmd
Und dann eingeben:
Prompt $p$_$g
Mode con cols=166 lines=55
Danach dann
D:\schnipsel\RenLongDatumUhrzeit.bat
{ oder wo immer und unter welchem Namen Deine *.bat liegt}und sollte DANN nix zu lesen sein, dann das "@echo off" in ein "@echo on" ändern.
Danach sehen wir weiter.
Grüße
Biber
Moin Ela1076,
bei Pfaden und Dateien mit Leerzeichen im Namen musst Du diese in Anführungszeichen setzen.
So wie ich es hier in dem Batchschnipsel getan habe:
Grüße
Biber
bei Pfaden und Dateien mit Leerzeichen im Namen musst Du diese in Anführungszeichen setzen.
So wie ich es hier in dem Batchschnipsel getan habe:
Set "Startdir=S:\Misc\Statistik-Archiv\000 Testdateien"
Also bitte nach dem "Start"->"Ausführen"->cmd Zeile für Zeile einzeln eingeben und ENTER drückenS:
cd "S:\Misc\Statistik-Archiv\000 Testdateien"
--- falls die Datei "test.bat" dort gespeichert ist --
test.bat
---- alternativ, falls die Datei test.bat auf "x:\xz\bla" liegt
--- x:\xz\bla.test
Grüße
Biber
Moin Ela,
nicht entmutigen lassen...
Die Fehlermeldung "Datei nicht gefunden" kommt ja nicht von dem "SET startdir=lalala"-Befehl, sondern eine Zeile tiefer von dem DIR-Befehl, der nu mal keine " "%startdir%\*_2009????_??????.xls"-Dateien findet in diesem und den darunterliegenden Verzeichnissen.
Also lass die Batchdatei im Moment Batchdatei sein und bleibt am CMD-Prompt und überprüf bitte nochmals die Wildcardkonvention der *.xls-Dateien.
Vorgehen.
Grüße
Biber
nicht entmutigen lassen...
Die Fehlermeldung "Datei nicht gefunden" kommt ja nicht von dem "SET startdir=lalala"-Befehl, sondern eine Zeile tiefer von dem DIR-Befehl, der nu mal keine " "%startdir%\*_2009????_??????.xls"-Dateien findet in diesem und den darunterliegenden Verzeichnissen.
Also lass die Batchdatei im Moment Batchdatei sein und bleibt am CMD-Prompt und überprüf bitte nochmals die Wildcardkonvention der *.xls-Dateien.
Vorgehen.
- Erst auf S: und in's "S:\Misc\Statistik-Archiv\000 Testdateien"-Verzeichnis wechseln (das kannst Du jetzt wahrscheinlich schon, wenn Dich einer morgens um 03:17h weckt und mit verbundenen Augen an die Tasten setzt).
- dann zuerst DIR /s /b *.xls eingeben --> da sollten unter anderem die *.xls-Dateien gelistet werden, die Du brauchst und ein paar andere, die nicht dazugehören.
- dann den DIR-Befehl weiter mit der "richtigen" Wildcard eingrenzen, bis nur noch die Dateien übrig bleiben, die Du haben willst.
- und diese Wildcard kannst Du dann in den Batch übernehmen
Grüße
Biber