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

Umfangreiches Sortieren von Dateien in neue Unterverzeichnisse

Frage Entwicklung Batch & Shell

Mitglied: freckeldfrickler

freckeldfrickler (Level 1) - Jetzt verbinden

02.10.2012, aktualisiert 16:57 Uhr, 3185 Aufrufe, 9 Kommentare

Hallo ,
habe folgende Problemstellung:
Ich habe einen Ordner UNSORTIERT, mit ca. 500 Unterordnern, darin gibt es jeweils mehrere hundert Dateien.
Aus diesen Unterordnern sollen bestimmte Dateien (z.B. mit Jürgen Meier im Namen : Jürgen_Wünsche.txt oder Jürgen-Urlaub2001.jpg) in einen Neuen Ordner SORTIERT/Jürgen Meier verschoben werden.
Die Art der zu verschiebenden Dateien stehen in einer Liste (liste.txt)

Hallo ,
habe folgende Problemstellung:
Ich habe einen Ordner UNSORTIERT, mit ca. 500 Unterordnern, darin gibt es jeweils mehrere hundert Dateien.
Aus diesen Unterordnern sollen bestimmte Dateien (z.B. mit Jürgen Meier im Namen : Jürgen_Wünsche.txt oder Jürgen-Urlaub2001.jpg) in einen Neuen Ordner SORTIERT/Jürgen Meier verschoben werden.
Die Art der zu verschiebenden Dateien stehen in einer Liste (liste.txt)
Da der Zielordner nicht immer identisch mit dem Dateinamenbruchstück ist, steht hinter dem Trennzeichen der neu zu erstellende Zielordner.
*
LISTE.TXT :

J.M.=Jürgen Meier
Jürgen=Jürgen Meier
Jutta=Jutta Meier
Jumei=Jutta Meier
Otto
Karl
@=ENTWUERFE

*

Die Namen können sowohl am Anfang als auch in der Mitte des zu findenden Dateinamens stehen (bis auf @, steht immer am Anfang); Otto & Karl soll dabei immer in ein Unterverzeichnis SORTIERT/Otto bzw. /Karl verschoben werden, weil kein gesonderter Zielordner angegeben ist.


Wenn es möglich ist, sollte eine Datei die den gleichen Namen hat, automatisch eine Umbenennung erfahren, eventuell mit (1), (2) etc, oder
mit einem Zeitanhang _JJMMDDHHMMSShh; hier entweder das aktuelle Verschiebedatum oder das Erstelldatum:
Also Unsortiert/VZ1/otto1.jpg --> Sortiert/Otto/otto1.jpg
Unsortiert/VZ3/otto1.jpg --> Sortiert/Otto/otto1(1).jpg oder Sortiert/Otto/1_12093017521323.jpg
Unsortiert/VZ13/otto1.jpg --> Sortiert/Otto/otto1(2).jpg oder Sortiert/Otto/otto1_12093017540401.jpg
Unsortiert/VZ129/otto1.jpg --> Sortiert/Otto/otto1(3).jpg oder Sortiert/Otto/otto1_12093017540698.jpg
Es kommt darauf an, dass keine Datei durch Überschreiben verloren geht.

Mein erster Versuch sieht so aus:

01.
@echo off & setlocal 
02.
FOR /f "usebackq delims==" %%a IN (liste.txt) DO ( 
03.
if not exist c:\versuch\tmp\%%a mkdir c:\versuch\tmp\%%a 
04.
echo findet alle Dateien mit Namen %%a am Anfang: 
05.
dir /s/b %%a*.* > tmp.txt 
06.
rem findet alle Dateien mit Namen %%a in der Mitte: 
07.
dir /s/b *%%a*.* >> tmp.txt 
08.
FOR /f "usebackq delims==" %%b IN (tmp.txt) DO copy /-Y "%%b" c:\versuch\tmp\%%a 
09.
echo "FOR /f "usebackq delims==" %%b IN (test.txt) DO copy /-Y "%%b" c:\versuch\tmp\%%b" 
10.
)
Das KOPIEREN scheint zu funktionieren.

Noch etwas Wichtiges: Die Dateien sollen im ERNSTFALL nicht kopiert, wie im Skript momentan vorhanden, sondern bewegt (move) werden, das COPY steht nur im Moment der Testphase dort. Dies führt aber höchstwahrscheinlich noch zu weiteren Problemen, da beim MOVE auch die Verzeichnisnamen, die den Suchstring enthalten, sofort wegbewegt werden, samt Dateien, die gar nicht der Suchmaske entsprechen.

Allerdings arbeitet mein Skript bisher nur mit einer e i n f a c h e n Liste, und nicht mit der oben stehenden, gewünschten:


Liste(vorläufig).txt:

J.M.
Jürgen
Jutta
Jumei
Otto
Karl


D.h es wird immer ein neues VZ erstellt, wie die Namensbruchstücke gelistet sind, was ich aber so nicht will (J.M. sollte ja in ein VZ "Jürgen Meier" kopiert werden.

Wie bewerkstellige ich, daß ich mit "Liste.txt" arbeiten kann.
Ein noch groesseres Problem ist und bleibt aber das Problem des nicht Überschreibens! Und da habe ich noch nicht einmal die blasseste Ahnung, wie das gelöst werden könnte.
Es gibt einen Beitrag von BASTLA unter http://www.administrator.de/frage/Gleichnamige-Dateien-in-verschiedenen ... mit einem Lösungsansatz:

01.
for /F "tokens=1* delims=:" %%i in ('findstr /n "^" test.bak') 
02.
do for /f "tokens=1* delims=:" %%x in ('findstr /n "^"  
03.
namen.bak^|findstr /b "%%i:"')  
04.
do echo copy "%%j" "C:\test\%%y.jpg"


Doch wie binde ich das ein? Als absoluter Gelegenheitsbatchschreiber bin ich von all den Tokens and Delims dermaßen verwirrt, dass ich, wenn überhaupt,Tage bis Wochen bräuchte, um dass alles zusammen zu frickeln. Darum bitte ich die Profis unter Euch, mir mal ein wenig zu helfen.


Ich hoffe, mein Problem verständlich dargestellt zu haben und freue mich über jeden Hinweis


FF
Mitglied: pieh-ejdsch
02.10.2012, aktualisiert um 15:55 Uhr
moin freckeldfrickler,

wie genau ist denn der Dateiname aufgebaut?
mit Unterstrich bzw Mittestrich als Trenner vom Namen zu den Daten
01.
Namensteil_Datenteil.txt 
02.
N.T.-Datenteil.jpg
Gibt es dann auch keinen weiteren Unterstrich bzw. Mittstrich im Dateinamen?

Kannst Du beim Erstellungsdatum sicherstellen, dass die Dateien immer ein anderes Erstellungsdatum haben?

Setz bitte den Code nicht in Fettschrifft sondern in Codeblöcke.
wie es geht steht in diesem Abschnitt: Verfassen

Gruß Phil
Bitte warten ..
Mitglied: freckeldfrickler
02.10.2012, aktualisiert um 17:29 Uhr
Hallo Phil,

so ich hoffe, jetzt stimmt es mit den Codeblöcken.

Zu den Dateinamen:
Es gibt kein verallgemeinerungsfähiges Muster.
Es handelt sich hierbei um Dateien von Schülern, die mal dazu aufgefordert wurden, eine Systematik in Ihre Dateinamen zu bringen.Was nur mehr oder meist weniger gut funktioniert.

Jutta hatte hatte mal die Dateienunter 'Jutta......doc' oder unter '......Jutta.pdf' oder 'Jumei_.......txt' sogar unter Foto_Klassenfahrt_Jutta_Mai2010.jpg oder Foto_Klassenfahrt_Jumei_Mai2010.tif abgespeichert.

Jürgen hingegen benutzt zeitweise 'Jürgen.....' oder 'J.M.......'
oder J.M.foto_Mai2010_Klassenfahrt22.jpg oder foto17Mai2010Klassenfahrt(JM).bmp (ganze ohne Striche!).
Das Skript soll als Filter werkeln: Dafür die schnell zu bearbeitende LISTE.txt. Man kann ganz schnell z.B. "Klassenfahrt" als abzuarbeitenden Begriff eintippen oder auch pippo=Jürgen Meier hinzufügen, falls es sich herausstellt, dass Jürgen nun sich ein anderes Kürzel angewöhnt hat.Oder Ich kann durch Otto=Klasse12c und Jutta=Klasse12c einen bestimmten neuen Speicherort zuweisen, und so zum Beispiel den ganzen produzierten Mist der Klasse 12c sammeln und vereinen. Im nächsten Jahr wir dann geändert: Jutta=13c , Otto=12c weil er das Klassenziel nicht erreicht hatte. Für das Problem des in jedem 2. Verzeichnis auftretenden dok1.doc nehme ich dann eben dok1=unbenannte_Dokumente in meine Liste auf, hier wird die geforderte Durchnummerierung der Dateien offensichtlich.

Noch etwas Wichtiges: Die Dateien sollen im "ERNSTFALL" nicht kopiert, wie im Skript momentan vorhanden, sondern bewegt (move) werden, das "copy" steht nur im Moment der Testphase dort. Dies führt aber höchstwahrscheinlich noch zu weiteren Problemen, da beim "move" auch die Verzeichnisnamen , die den Suchstring enthalten, sofort wegbewegt werden, samt Dateien, die gar nicht der Suchmaske entsprechen.
Ich habe dafür zwar hilfsweise eine manuelle Lösung parat, (z.B. alle Verzeichnisnamen in Namen mit laufende Nummern umbenennen), vielleicht lässt sich aber von vorneherein dieses Problem irgendwie umgehen.

Zu den Datumswerten: Ich gehe mal davon aus, dass zwei Dateien mit gleichen Namen und und gleichem Erstellungsdatum HIER in diesem Falle als identisch zu betrachten sind und dann auch ruhig überschrieben werden können, falls sich die Überprüfung
a u c h auf die Uhrzeit bezieht.
Anders der Fall, wenn die Datei VZ2/10.jpg und die Datei VZ9/10.jpg
nicht den gleichen Datumsstempel haben, dann sind sie offensichtlich wohl nicht gleich und eine Datei davon muss mit einer laufenden Nr. oder sonstwas umbenannt werden.
Ich hoffe, ich liege mit dieser Annahme richtig.
Bitte warten ..
Mitglied: 60730
02.10.2012, aktualisiert um 17:49 Uhr
moinsen,

mal was ganz anderes....

  • ist das ein Windows Server, auf dem die Daten liegen?
  • Vielleicht sogar ein NTFS Volume?
  • Und die Schüler sind "zufälligerweise" in der AD angelegt?

Wenn 3* Ja, dann ist das ganz "einfach"....

Dir /a-d /q

Gruß
Bitte warten ..
Mitglied: freckeldfrickler
02.10.2012 um 19:02 Uhr
Hallo LimboSeil,
3 x nein, leider nicht.
Ist ein popeliger Windows XP -Rechner und die Daten liegen auf einem FAT32 Volumen, um locker von Linux aus darauf zugreifen zu können.
Gruss FF
Bitte warten ..
Mitglied: pieh-ejdsch
03.10.2012, aktualisiert um 11:58 Uhr
moin,

Irgendwie müssen die Daten ja auf das Volume drauf gekommen sein.
Da könnte von dem Ursprungort mit NTFS auch der Besitzer gefiltert werden. So wie von LimboSeil der Gedanke.
>for /f "tokens=2delims=\:" %i in (' cacls Dateiname ^|find /i " %computername%"  ' 
 ) do @echo Benuzter=%i
Aber für so ein Durcheinander von Mustern, ist es schon etwas schwierig eine komplette Automatik zu basteln.
Ist in den einzelnen Unterordnern (VZ1 VZ2 etc. ...) von allen Schüler immer nur eine Datei bzw ein Satz von Daten drin, sprich die komplette Klasse wurde in einem Unterordner für ein Projekt eingesammelt?
Oder gibt es mehrere Projekte eines Schülers in einem Ordner?

Wie soll sonst ein SchülerNamensbestandteil einer Datei von einem ProjektNamen unterschieden werden?

Eine grobe Vorsortierung mit einem Batch würde zwar gehen, aber es müsste immer alles Kontrolliert werden.

Für so einen Fall habe ich eine Batch, welche mir erst die Ordnerstruktur und Mögliche Kopier- /Verschiebeaktionen je Zeile auflistet.
Bei seperaten Ordnern auch Namen.
Diese Liste schaue ich mir an und kann danach den Batch verfeinern.
Ist die Liste von mir abgesegnet, greift erst dann Teil zwei des Batches mit den Verschieben.

Gruß Phil
Bitte warten ..
Mitglied: freckeldfrickler
03.10.2012 um 14:49 Uhr
Hallo Phil,

ja irgendwie, manchmal auch über eine Linux-Live-CD. Das Problem über die Benutzerrechte zu lösen halte ich für keine gute Idee, weil FAT eben keine Benutzerrechte kennt.
Aber ich glaube, das alles etwas weniger kopliziert ist, als es sich anhört (liest).
Ich will mal Versuchen, alles nach und nach aufzubauen. Dabei denke ich mir folgenden Fahrplan:
1. Auslesen aus Liste (z.B. J.M.=Juergen Meier , funktioniert)
2. Aufsplitten in Quelle und Ziel ( funktioniert prinzipiell, ausser das ich den Wert aus 1 nicht in die 2. for-Schleife bekomme)
3. Einfügen von Quelle und Ziel in die Kopier- bzw Move-Funktion (müsste ich doch wohl schaffen)
4. Einbringen eines Überschreibschutzes nach dem Muster von BASTLA, mal sehn, soweit bin ich ja noch nicht)
c'est ca!
Da ich aber Gelegenheitsschreiber von cmds bin, benötige ich sicher noch den einen oder anderen Tip von Dir oder anderen Experten, weil meine syntaktischen Kenntnisse insbesonder bei For, delims, tokens und Variablenübergabe etc. sehr mangelhaft sind. Manchmal fehlt halt ein % oder ' oder " und nichts geht mehr.

So, ich poste mal hier meinen Versuch von gesamten gestrigen Abend:
01.
 
02.
echo off & setlocal 
03.
 
04.
rem nächste Zeile liest aus Liste z.B. J.M.@JürgenMeier 
05.
FOR /f "usebackq delims==" %%a IN (liste.txt) DO SET STRING=%%a & ( 
06.
rem ......%%a in %STRING% setzen funktioniert nicht: 
07.
echo TEST: STRING IST %STRING% 
08.
rem ??????????????????????????????????????????????????????????????????????? 
09.
rem Wie bekomme ich den Inhalt von %%a in die nächste FOR- Zeile? 
10.
rem nächste FOR-Zeile sollte %aa (J.M.@JürgenMeier) aufsplitten, was auch prinzipiel 
11.
rem funktioniert (ausser dass der Wert von %%a oder %String% nicht übernommen wird. 
12.
FOR /F "tokens=1,2 delims=@" %%G IN (%STRING%) DO set Quelle=%%G & set Ziel=%%H 
13.
echo TEST: Quelle ist %Quelle%, Ziel ist %Ziel% 
14.
rem weiter bin nach langem probieren noch nicht gekommen. . . . 
15.
rem ---------------------------------------------------------------------- 
16.
pause 
17.
rem Hier muss ich dann noch umbauen, dass %Quelle% und %Ziel% verarbeitet wird... 
18.
if not exist c:\versuch\tmp\%%a mkdir c:\versuch\tmp\%%a 
19.
echo findet alle Dateien mit Namen %%a 
20.
dir /s/b %%a*.* > test.txt 
21.
rem findet alle Dateien mit Namen %%a: 
22.
dir /s/b *%%a*.* >> test.txt 
23.
FOR /f "usebackq delims==" %%b IN (test.txt) DO copy /-Y "%%b" 
24.
rem Irgendwo hier oder eine Zeile höher müsste dann die Frage nach vorhandenen Dateien und der Umbenenung erfolgen 
25.
c:\versuch\tmp\%%a 
26.
echo "FOR /f "usebackq delims==" %%b IN (test.txt) DO copy /-Y "%%b" c:\versuch\tmp\%%b" 
27.
)

Wer kann mir Hilfestellung bei den ??????????????????????? geben?

Grüsse
FF
Bitte warten ..
Mitglied: freckeldfrickler
03.10.2012 um 19:00 Uhr
Zu meinem vorhergehenden Kommentar habe ich folgenden Zusatz.

Ich habe ein wenige gebastelt um das Problem mit der Variablen zu lösen.

Dazu habe ich die Ausgabe des ersten FOR in eine Datei tmp.tmp umgeleitet.

In den Quelltext vom vorhergehenden Beitrag habe ich dann vor Zeile 12 mittels

01.
for /F "delims=" %%z in (tmp.tmp) do if not defined zeile set "ZEILE=%%z"
versucht, tmp.tmp auszulesen und den Wert dann in %Zeile% zu speichern.
Der Wert wurde aber diesmal auch nicht übernommen (wie bei meiner ersten for-Konstruktion) und ein echo von %Zeile% bleibt auch hierbei leer.

Setze ich die Zeile alleine in eine neue cmd , dann funktioniert alles tadellos: Die Zeile wird ausgelesen und die Variable %Zeile% wird auch als Echo wiedergegeben.


Was läuft hier wohl falsch? Warum kann man nach dem ersten For ein zweites nicht mehr normal benutzen?
Bitte warten ..
Mitglied: pieh-ejdsch
07.10.2012, aktualisiert um 14:04 Uhr
Eine Variable innerhalb einer Klammer muss mit delayedexpansion aufgelöst werden.
Dies ist aber nicht nötig, wenn Du die Variable so wie Du sie Benötigst Nicht veränderst, denn sie ist ja schon in der For-Variable %%a enthalten.
Es gibt hier auch einige gute Tutorials im Batch Bereich.

Für den Anfang kannst Du das Ganze so lösen:
;testnamen.txt 
;Zeilen mit Semikolon sind Kommentarzeilen 
J.M.=Jürgen Meier 
Jürgen=Jürgen Meier 
Jutta=Jutta Meier 
Jumei=Jutta Meier 
Otto 
Karl 
;wenn Entwürfe zuerst behandelt werden also vorher 
;kann nach Priorität erst diese Markierung verschoben werden   
@=ENTWUERFE
01.
@echo off 
02.
setlocal 
03.
 
04.
 :: echo on 
05.
 
06.
set "Quelle=D:\adtest\alt" 
07.
set "Ziel=D:\adtest\neu" 
08.
set "Namen=D:\adtest\testnamen.txt" 
09.
 
10.
 
11.
set "TempN=%temp%\Namenliste850.txt" 
12.
 rem Liste mit Umlauten cmd tauglich umschreiben 
13.
chcp 1252 >nul 
14.
3>"%TempN%" ( 
15.
for /f "usebackqtokens=1*delims==" %%a in ("%namen%") do for /f "tokens=2delims=:" %%b in ("%%a:%%b:%%a") do chcp 850 >nul &>&3 cmd /c "echo %%a:%%b:"&chcp 1252 >nul 
16.
17.
chcp 850 >nul 
18.
 
19.
 rem Dursuche Verzeichnis mit Liste 
20.
for /f "usebackqtokens=1,2delims=:" %%a in ("%tempN%") do ( 
21.
   rem BenutzerName länge bestimmen 
22.
  set "BName=%%a" 
23.
  for /f %%c in ('cmd /u /von /c "echo !BName!"^|more^|findstr .^|find /c /v "" ') do set /a LN=%%c , LkN=ln-1 
24.
  set "BPfad=%%b" 
25.
  for /r "%quelle%" %%i in ("*%%a*" ) do ( 
26.
    if not exist "%ziel%\%%b\" md "%ziel%\%%b" 
27.
    set "FName=%%~dpi" 
28.
    set "Datei=%%~ni" 
29.
    set "DNameNeu=%%~ni" 
30.
    call :Namecheck %%~xi 
31.
) ) 
32.
 
33.
exit /b 
34.
 
35.
:Namecheck 
36.
setlocal enabledelayedexpansion 
37.
for /f "delims=" %%i in ("!datei:%Bname%=!" ) do endlocal & set "DNameNeu=%%~i" 
38.
if "%Datei%" neq "%Dnameneu%" set "DNameNeu=[%BPfad%]%Dnameneu%" &goto :findDouble 
39.
 
40.
:Nameset 
41.
 rem wenn Name nicht Case sensitiv gefunden! 
42.
 rem zeige Offsets vom 1.des Benutzernamens im Dateiname zum Vergleichen 
43.
for /f "delims=[]" %%I in (' cmd /u /von /c "echo !datei:~0^,-%lkn%!"^|find /i /n "%Datei:~0,1%" ') do ( 
44.
  echo %%I  
45.
  set /a V =%%I -1 ,H =V +LN 
46.
  setlocal enabledelayedexpansion 
47.
  for /f "tokens=1-2" %%J in ("!V! !H!") do ( 
48.
    echo %%J 
49.
    if /i !Datei:~%%J^,%LN%! equ !BName! if !Datei! equ !DnameNeu! for /f "delims=" %%J in ("[!BPfad!]!Datei:~0,%%J!!Datei:~%%K!") do endlocal &set "DnameNeu=%%J" 
50.
51.
52.
 
53.
:findDouble 
54.
set "Timestamp=" 
55.
 rem Bei Timestamp anpassen mit :: goto 
56.
goto :NoTimestamp 
57.
 
58.
 rem Timestamp mit Sekunden liefert Robocopy 
59.
for /f "tokens=1-7* delims=/:	 " %%S in (' 2^>nul robocopy /L /ts /fp /bytes /np /nc /ndl /njh /njs "%FName:~0,-1%" "D:\irgendetwasesnochnichtgibt" "%Datei%%1"') do set "Timestamp= [%%T%%U%%V%%W%%X%%Y]" &rem Groesse=%%S ,"Name=%%Z"  
60.
:NoTimestamp 
61.
 
62.
 rem wenn doubletten als extra Datei verschoben werden sollen 
63.
set "double=" 
64.
:: goto :nodouble  
65.
 
66.
(for /f %%A in (' ^( echo(. ^&2^>nul dir /b "%ziel%\%BPfad%\%DnameNeu%%Timestamp%%1" "%ziel%\%BPfad%\%DnameNeu%%Timestamp% (*)%1" ^) ^|find /c /v "" ^|findstr /vx "0 1" ') do set "double= (%%A)" ) || set "double=" 
67.
 
68.
:nodouble 
69.
@echo move "%FName%%Datei%%1" "%ziel%\%BPfad%\%DnameNeu%%Timestamp%%double%%1"  
70.
:: move "%FName%%Datei%%1" "%ziel%\%BPfad%\%DnameNeu%%Timestamp%%double%%1"  
71.
 
72.
exit /b
Gruß Phil
Bitte warten ..
Mitglied: freckeldfrickler
20.03.2013 um 14:53 Uhr
Hallo Phil,

etwas spät - aber ich hoffe nicht zu spät. Nachdem für mein Problem erst mal kein weiter Vorschlag im Forum kam, habe ich es auch nicht mehr besucht. Um so grösser die Freude, dass doch noch ein umfassende Lösung von Dir gekommen ist, aber dazu später.
Ich selbst habe für mich in der Zwischenzeit mir eine Lösung zusammengekrückt, mit der ich arbeiten kann.
Weil es aufgrund der vielen verschachtelten for-Schleifen ständig zu für mich nicht auflösbaren Fehlermeldungen und unerwarteten Ergebnissen kam,habe ich folgendes gemacht.
Ein "generiere-das-verschiebe-cmd.cmd" erzeugt mir ein "verschiebe.cmd", dazu liest es aus meiner Liste ( KM-#Meier, klaus#Meier , -km#Meier, Conny#C_Meier etc.) die einzelnen Zeile nach und nach aus und schreibt für
jede Listenzeile diese 4 Zeile in die "Verschiebe.cmd".
01.
echo ************ bearbeite meier ***************   
02.
if not exist q:\themes\meier\nul mkdir q:\themes\meier  
03.
dir /s/b KM-.*.* >> test.txt  
04.
FOR /f "usebackq delims==" %%a IN (test.txt) DO move /-Y "%%a" q:\themes\meier

Alsofür jeden Eintrag in der Liste ein neuer Vierzeiler . . .

Das ergibt dann eine ganz schön lange "verschiebe.cmd" für um die hundert Einträge in der Liste, diese wird dann als Spagetticode abgearbeitet. Aber es funktioniert.

Ein Wermutstropfen. Da es mir nicht gelungen ist, ">>" und "%%a" in die verschiebe.cmd zu echoen, verwende ich nun ++ statt >> beim generieren. Danach muss ich manuell mit einem Editor alle ++ durch >> und alle %a durch %%a ersetzen. Danach läuft aber die verschiebe.cmd und erspart mir einige Stunden manuellen Sortierens.
Einiges ist bei dieser Lsg. natürlich auf der Strecke geblieben, insbesondere die Abfrage nach doppelten Dateien. Ich habe viel mit einem Counter an unterschiedlichen Stellen experimentiert, aber die mehrfach verschachtelten for-Schleifen ließen ihn niemals so laufen , wie ich es geplant hatte. Auch bereitete mir das eine oder andere Sonderzeichen im Dateinamen Probleme.

Jetzt bereite ich die zu verschiebenden Dateien mit einem batch-renamer gründlich vor, entferne damit Leer- und Sonderzeichen und hänge einen Counter (00001, 00002 usw.) an die Dateinamen an, somit macht es nichts aus, dass
meine Spagetti-verschiebe.cmd keine schon vorhandenen Dateien berücksichtig, der Fall kommt ja nicht (mehr) vor. Ist wahrscheinlich für einen PC-Spezialisten eine ärmliche Lösung, aber für einen Praktiker ist die ärmliche Lösung besser als keine Lösung.

So, nun zu dem neuen Vorschlag von Dir. Wie ich sehe, hast Du echt viel Zeit & Mühe darin investiert. Die batchscheint ja alles zu berücksichtigen. Wenn ich sie so überfliege, fällt mir auf, dass allein das Aufrufen und Beenden von setlocal, enable ... von mir schon nicht hätte geleistet werden können.


Obwohl ich dazu (d?)einen Spezialbeitrag in diesem Forum gelesen hatte, der mir aber nicht weitergeholfen hat. Dazu muss man schon mehr Feeling im Kopf für batch-Dateien haben, um das alles zu verstehen und vor allem auch RICHTIG anwenden zu können.
"rem Liste mit Umlauten cmd tauglich umschreiben" darauf wäre ich nie gekommen! Da muss man schon Programmierer mit Leib und Seele sein. Kompliment.

Sobald ich etwas Zeit habe, werde ich das Script mal durchlaufen lassen, ich kann mir nicht vorstellen, dass Du es ungetestet hier eingestellt hast.
Nochmals, recht herzlichen Dank für Deine Mühen,

FF, (besser spät als nie!)
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Microsoft Office
Excel Dateien durchsuchen und Werte einzeln in neue Excel Datei auslesen (1)

Frage von krischanii zum Thema Microsoft Office ...

Windows Tools
gelöst Tool um neue Dateien aus Ordner A EINMAL in Ordner B zu kopieren (6)

Frage von Archimedes zum Thema Windows Tools ...

Batch & Shell
gelöst Dateien anhand des Namens in neue Ordner verschieben (17)

Frage von Cookiemonster zum Thema Batch & Shell ...

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

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

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

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

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...