ela1076
Goto Top

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!

Content-Key: 106483

Url: https://administrator.de/contentid/106483

Printed on: April 19, 2024 at 22:04 o'clock

Member: bastla
bastla Jan 19, 2009 at 17:27:36 (UTC)
Goto Top
Hallo Ela1076 und willkommen im Forum!

Ein probates Mittel in solchen Fällen ist ein
subst X: "S:\Misc\Statistik-Archiv\000 Testdateien"
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
subst X: /d
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
Member: Ela1076
Ela1076 Jan 20, 2009 at 12:02:33 (UTC)
Goto Top
Vielen Dank schon mal für Deine Hilfe, bastla! Leider funktioniert es trotzdem noch nicht. Ich habe Folgendes eingegeben:

subst X: "S:\Misc\Statistik-Archiv\000 Testdateien"
For /F "Tokens=*" %%i IN ('Dir /B "X:\ABCglobal_Land_abcdefghijklmno_abcdefghijklmn_Inhalt/_123456789_File_*.xls"') DO (
Move /Y "%%~i" "X:\123456789 File - ABCglobal Land abcdefghijklmno & abcdefghijklmn Inhalt"
subst X: /d
pause)

-> Ergebnis: The filename or extension is too long. :o(
----

Wie gesagt, für mich sind batch-Files noch "Neuland", da ich mich erst seit ein paar Tagen damit beschäftige. Über Google und das "Hilfe und Support"-Menü habe ich nichts Brauchbares für dieses Problem finden können. Vielleicht ist auch die FOR-Schleife fehlerhaft... obwohl ich glaube, dass es nicht daran liegt.

Scheint so, als wäre das Problem tatsächlich der Dateiname, unabhängig von den Pfadangaben, die davor stehen. Kann man den vielleicht irgendwie kürzen, um ihn zu verschieben (und danach wieder in den ursprünglichen Zustand zurücksetzen)?

Zu Deiner Frage nach der Verwendung der Dateien: Die kommen grundsätzlich täglich von "außerhalb" (deswegen kann der Name auch nicht geändert bzw. gekürzt werden) und müssen von mir in den jeweiligen Ordnern archiviert werden, um später bei Bedarf darauf zurückgreifen zu können. Diese Unterordner werden von sehr vielen Leuten verwendet, weshalb sie ebenfalls nicht umbenannt werden sollten.

Viele Grüße,
Ela
Member: Ela1076
Ela1076 Jan 20, 2009 at 14:10:22 (UTC)
Goto Top
Nachtrag:

Ich denke, mir wäre schon ein Stück weit geholfen, wenn ich die Dateien ABCglobal_Land_abcdefghijklmno_abcdefghijklmn_Inhalt/_123456789_File_20090118_180536 (vorübergehend, bis sie verschoben sind)
in
XY_20090118_180536
umbenennen könnte.

Allerdings machen die Unterstriche da Probleme, denn mit
rename "S:\Misc\Statistik-Archiv\000 Testdateien\ABCglobal_Land_abcdefghijklmno_abcdefghijklmn_Inhalt/_123456789_File_*.xls" "XY_*.xls"
wird nicht alles vor dem * ersetzt, sondern nur der Abschnitt bis zum ersten Unterstrich,
also im Ergebnis dann XY_Land_abcdefghijklmno_abcdefghijklmn_Inhalt/_123456789_File_*.xls

Hat hier vielleicht jemand eine Idee?

Ela
Member: Biber
Biber Jan 20, 2009 at 21:26:51 (UTC)
Goto Top
Moin Ela1076,

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"
umbenennen willst
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  
)))
Das letzte GROSS geschrieben ECHO dient nur zum Testen.
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  
....
--->dann kannst Du das ECHO weglassen und den Schnipsel abfeuern.

Grüße
Biber
Member: Ela1076
Ela1076 Jan 22, 2009 at 10:28:31 (UTC)
Goto Top
Hallo Biber,

die Idee mit der Umbenennung ohne Wildcard-Zeichen (bzw. anders als vorhin) klingt wirklich sehr gut, danke schon mal für die Batch-Datei!
Nur leider... leider funktioniert das bei mir auch nicht. Wenn ich das batch-file ausführe, erscheint nur für eine Sekunde das "schwarze Fenster" (auch wenn ich 'pause' noch mit einbaue), und im Endeffekt tut sich gar nichts. Also die Dateinamen haben sich nach der Ausführung des Batch-Programms nicht verändert.

Dass das Fenster (trotz 'pause') nur ganz kurz erscheint und sonst nichts passiert, kam schon öfter mal vor - woran liegt denn das?

Grüße,
Ela
Member: Biber
Biber Jan 22, 2009 at 20:22:16 (UTC)
Goto Top
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:
Prompt $p$_$g
Mode con cols=166 lines=55
...damit du überhaupt irgendetwas siehst.

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
Member: Ela1076
Ela1076 Jan 27, 2009 at 13:12:10 (UTC)
Goto Top
Hallo,

so, jetzt hab ich Deinen Vorschlag mal ausprobiert, aber irgendwie klappt's nicht bzw. ich steh auf der Leitung...
Also bei mir scheitert's schon am Ausführen der Datei. Ich muss dazu aber sagen, dass ich mit CMD-Prompt noch weniger Ahnung habe als mit batch-Dateien.

Ich habe zum CMD-Prompt gewechselt, dann die Größe angepasst, wie vorgeschlagen. (hat alles noch wunderbar funktioniert ;o)

Der Pfad der .bat-Datei ist S:\Misc\Statistik-Archiv\000 Testdateien\test.bat
Ich habe Folgendes eingegeben:

S:
cd S:\Misc\Statistik-Archiv\000 Testdateien
call test.bat (so hab ich die .bat-Datei genannt)

dann kam "Datei nicht gefunden".

Hm...?!

Ist bestimmt ein ganz dummer Fehler, nur ich komm (auch mit Google-Hilfe) grad nicht drauf.

Gruß,
Ela
Member: Biber
Biber Jan 27, 2009 at 17:37:21 (UTC)
Goto Top
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:
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ücken
S:
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
Member: Ela1076
Ela1076 Jan 29, 2009 at 10:31:58 (UTC)
Goto Top
Hi Biber,

also es ist echt wie verhext... bei mir klappt das einfach nicht mit dem Ausführen der Datei. Ich habe im CMD-Prompt auf das Laufwerk S gewechselt, dann mit cd "S:\Misc..." auf den Pfad gewechselt. (alle Eingabe natürlich auch mit Enter) Das hat alles noch wunderbar funktioniert. Angezeigt wurde dann

S:\Misc\Statistik-Archiv\000 Testdateien

Soweit noch alles ok...
Ich habe dann den Namen der .bat-Datei eingegeben:

>test.bat (ENTER)

...und bekam folgende Meldung:

S:\Misc\Statistik-Archiv\000 Testdateien
>Set "Startdir=S:\Misc\Statistik-Archiv\000 Testdateien"  
Datei nicht gefunden
S:\Misc\Statistik-Archiv\000 Testdateien
>

Ich hab das alles auch noch nur mit "test" (ohne".bat") und mit "call test.bat" probiert - mit demselben Ergebnis.
Auch wenn ich es mit einem anderen Dateinamen versuche (vielleicht gibt's ja mit dem Namen "test" Probleme...) ging's nicht.

Schönen Gruß,
Ela
Member: Biber
Biber Jan 29, 2009 at 12:47:13 (UTC)
Goto Top
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.
  • 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
Member: Ela1076
Ela1076 Jan 30, 2009 at 12:28:47 (UTC)
Goto Top
Hallo,

ich bin jetzt gerade ein bisschen verwirrt... Also das Problem ist ja, dass sich das Programm zum Umbenennen der Dateien gar nicht erst starten lässt! Es befindet sich eben im Ordner S:\Misc\Statistik-Archiv\000 Testdateien und heißt test.bat. Auf das Verzeichnis komme ich jetzt schon ohne Probleme - bestimmt auch um 03:17, da hast Du Recht ;o) - aber dann geht's nicht weiter.

Ich hatte es so verstanden: batch-Datei (die das Programm zum Umbenennen enthält) mit Doppelklick aus dem Explorer starten, ist nicht sinnvoll zum Testen (da das Fenster nur 1 Sekunde erscheint und man kein Ergebnis sieht).
Deshalb besser das Programm über den CMD-Prompt starten - und da hänge ich jetzt.

Ob die gewählten Wildcards richtig sind, kann sich ja dann erst herausstellen, aber so weit bin ich leider noch gar nicht.

(Den von Dir vorgeschlagenen DIR-Befehl habe ich aber ausprobiert, um die passenden Wildcards zu finden!)

Viele Grüße,
Ela