Variablen und Wildcards???
Hallöle,
ich möchte gerne per Batchdatei ein File von Verzeichnis A nach Verzeichnis B verschieben. Es gibt auf C:\ folgende Verzeichnisse:
c:\ABLAGE\1 - Beschreibung
c:\input
Das File aus c:\input\1.txt möchte ich nach c:\ABLAGE\1 - Beschreibung\1.txt verschieben.
Die 1 aus dem Dateinamen 1.txt gibt mir den Anfang des Verzeichnisses c:\ABLAGE\1 - Beschreibung an. Die 1 lese ich aus, den Rest möchte ich beim verschieben gerne über ein Wildcard vervollständigen.
Wenn ich es so mache klappt es aber nicht:
schnipp----------
@set meinroot=c:\input
@set copyroot=c:\ABLAGE
@chdir %meinroot%
@set datei=1.txt
@set Ver=%datei_alt:~0,1%
@echo %Ver%
@Move %meinroot%\%datei% %copyroot%\%Ver%*\%datei% (In dieser Zeile %Ver%*)
Was mache ich nur falsch, oder gehen Wildcards garnicht???
Danke und Gruß, Chris
ich möchte gerne per Batchdatei ein File von Verzeichnis A nach Verzeichnis B verschieben. Es gibt auf C:\ folgende Verzeichnisse:
c:\ABLAGE\1 - Beschreibung
c:\input
Das File aus c:\input\1.txt möchte ich nach c:\ABLAGE\1 - Beschreibung\1.txt verschieben.
Die 1 aus dem Dateinamen 1.txt gibt mir den Anfang des Verzeichnisses c:\ABLAGE\1 - Beschreibung an. Die 1 lese ich aus, den Rest möchte ich beim verschieben gerne über ein Wildcard vervollständigen.
Wenn ich es so mache klappt es aber nicht:
schnipp----------
@set meinroot=c:\input
@set copyroot=c:\ABLAGE
@chdir %meinroot%
@set datei=1.txt
@set Ver=%datei_alt:~0,1%
@echo %Ver%
@Move %meinroot%\%datei% %copyroot%\%Ver%*\%datei% (In dieser Zeile %Ver%*)
Was mache ich nur falsch, oder gehen Wildcards garnicht???
Danke und Gruß, Chris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 14948
Url: https://administrator.de/contentid/14948
Ausgedruckt am: 22.11.2024 um 08:11 Uhr
9 Kommentare
Neuester Kommentar
Moin chris,
vermutlich Tippfehler:
@set datei=1.txt
@set Ver=%datei_alt:~0,1%
Und das Vervollständigen über "*" geht so nicht. Der Text sollte aus einer Variablen (%1) kommen. Vielleicht meinst Du ja oben in Deinem Bätchelchen mit" \%Ver%*" auch "\%Ver%%*"....also ein "%Ver%" +"%*" ...aber das würde ich zumindest in zwei Zeilen auseinanderziehen (1. ZielVerzeichnis anlegen und 2. in Zielverzeichnis kopieren).
Oder legt Dein "move"-Befehl das Verzeichnis ggf. an?
Nicht weiter getestet.
Frank / der Biber aus Bremen
vermutlich Tippfehler:
@set datei=1.txt
@set Ver=%datei_alt:~0,1%
Und das Vervollständigen über "*" geht so nicht. Der Text sollte aus einer Variablen (%1) kommen. Vielleicht meinst Du ja oben in Deinem Bätchelchen mit" \%Ver%*" auch "\%Ver%%*"....also ein "%Ver%" +"%*" ...aber das würde ich zumindest in zwei Zeilen auseinanderziehen (1. ZielVerzeichnis anlegen und 2. in Zielverzeichnis kopieren).
Oder legt Dein "move"-Befehl das Verzeichnis ggf. an?
Nicht weiter getestet.
Frank / der Biber aus Bremen
Moin, chris,
Rückfrage:
Hab ich das richtig verstanden, dass
a) bei der bestehenden Ordnerstruktur gelten soll: Verschiebe die Dateien, deren Namen mit den vorhandenen Dateinamen korrespondieren dorthin ("1.pdf" -> Dir "1 blubbblubb"; "123456.pdf" ->Dir "123.456 sülzdibülz" ) ? Dann kann es ja immer nur genau eine Datei dort geben??? Falls vorhanden, überschreiben??
b) falls eine Datei gefunden wird, die den formalen Konventionen entspricht ("nnnnnnn.pdf"), soll....?? Ordner angelegt werden?? Beispiel Datei 345678.pdf? Neuer Ordner "345.678"??
Die Denke Deiner Anwender mutet mich etwas strange an. *anmerk
Rückfrage:
Hab ich das richtig verstanden, dass
a) bei der bestehenden Ordnerstruktur gelten soll: Verschiebe die Dateien, deren Namen mit den vorhandenen Dateinamen korrespondieren dorthin ("1.pdf" -> Dir "1 blubbblubb"; "123456.pdf" ->Dir "123.456 sülzdibülz" ) ? Dann kann es ja immer nur genau eine Datei dort geben??? Falls vorhanden, überschreiben??
b) falls eine Datei gefunden wird, die den formalen Konventionen entspricht ("nnnnnnn.pdf"), soll....?? Ordner angelegt werden?? Beispiel Datei 345678.pdf? Neuer Ordner "345.678"??
Die Denke Deiner Anwender mutet mich etwas strange an. *anmerk
*LAAAAAAAAAAAAACCCCHHT*
@chrisDu hast aber echt eine tolle Karte gezogen mit Deinen Usern...
Da brauch ich erst ein Becks, bevor ich etwas bastele. Ich setz mich mal heute abend dran.
Vielleicht auch erst nach zwei Bier...*kopfschüttel*
Gab es viele Bewerber für Deinen Job?
Mitfühlend
Frank / der Biber aus Bremen
uuups, chris,
hab ich vor lauter Tränen lachen ganz übersehen:
>Alles arbeitet soweit ganz gut, nur die Sache mit den sich änderden Ordnernamen ist so 'ne Sache.
Dann gibt es schon ein Grundgerüst? Oder ist der Stand der Dinge die 6 Zeilen oben?
Und der Batch soll als Task laufen und immer loslaufen, wenn er in dem Inputordner *.pdf-Dateien vorfindet?
Löst das weitere Aktionen aus (Info-Mail an User, Umbenenn-und Verschiebe-Protokoll)?
Biber
hab ich vor lauter Tränen lachen ganz übersehen:
>Alles arbeitet soweit ganz gut, nur die Sache mit den sich änderden Ordnernamen ist so 'ne Sache.
Dann gibt es schon ein Grundgerüst? Oder ist der Stand der Dinge die 6 Zeilen oben?
Und der Batch soll als Task laufen und immer loslaufen, wenn er in dem Inputordner *.pdf-Dateien vorfindet?
Löst das weitere Aktionen aus (Info-Mail an User, Umbenenn-und Verschiebe-Protokoll)?
Biber
So, chris
Du hast Dich ja etwas länger nicht gemeldet, daher gehe ich davon aus, dass Du schon eine Lösung gefunden hast
für Dein PDF-in-Ablage-Ordner-Problemchen. Ich hab trotzdem nochmal eine Batchlösung dafür zusammengeschreddert.
(Ist leider kein Oneliner geworden )
Snipp --Pdf2AblageTestet.bat------
Probiers aus.
Meine Testumgebung war diese Verzeichnisstruktur ("L:\" entspricht Deinem "\Ablage")
Da gibt es die z.B. die Struktur 1\12\123\123.4 (jeweils mit oder ohne textliche Ergänzung).
In diese Struktur werden die 3 Test-Pdfs kopiert
Ein Mini-Logfile wird geschrieben ins %temp%-Verzeichnis.
Inhalt:
Sollte Deinen Anforderungen entsprechen, wenn ich die richtig verstanden habe:
>In Zukunft soll die Datei 1234.pdf dann verschoben werden in
Sach mal Bescheid, ob es passt.
Frank / der Biber aus Bremen
[Edit] Was der Batch-Skizze oben noch fehlt, ist natürlich das Löschen/Verschieben der abgearbeiten *.PDF-Dateien.
Dazu muss noch in den CopyWithRename-Block eine neue vorletzte Zeile rein (vor dem (Set ExitLoop...),
die da sinngemäß del %1 heißt. Sollte kein Problem darstellen. [/Edit]
Du hast Dich ja etwas länger nicht gemeldet, daher gehe ich davon aus, dass Du schon eine Lösung gefunden hast
für Dein PDF-in-Ablage-Ordner-Problemchen. Ich hab trotzdem nochmal eine Batchlösung dafür zusammengeschreddert.
(Ist leider kein Oneliner geworden )
Snipp --Pdf2AblageTestet.bat------
@echo off & setlocal EnableDelayedExpansion & setlocal
<b>SET "meininputdir=d:\temp2" & REM .. bei chris: set meinroot=c:\input
SET "ablageroot=L:" & REM bei chris: set copyroot=c:\ablage</b>
SET LogFile="%temp%\%~n0.log"
PUSHD %ablageroot%\
IF NOT EXIST "%ablageroot%\NEU" MD "%ablageroot%\NEU"
FOR /f %%i IN ('dir /b %meininputdir%\*.pdf') DO CALL :loop %%i
POPD & GOTO :eof
-------Ende Hauptteil - End of Batch
:loop
If [%ExitLoop%]==[YES] set "ExitLoop=NO" & goto:eof
SET "PDFFileName=%1"
:Formalcheck Nur-PDFs-mit-Ziffern-erlauben
for %%a in (1 2 3 4 5 6 7 8 9) do if [%PDFFileName:~0,1%]==[%%a] goto :FormalCheckOk
echo Datei %1 entspricht nicht den Konventionen der Ablage. >>%LogFile%
echo Keine Verarbeitung von %1.>>%LogFile%
goto :eof
-- Ende Formalcheck Nur-PDFs-mit-Ziffern-erlauben-Block siehe >>> Anmerkung unten
:FormalCheckOk
(SET "subdir=%ablageroot%") & Set /a "len=1"
:repeatGetLongDirname
set ThisKnotpart=!PDFFileName:~0,%len%!
If %len% GTR 3 set "ThisKnotPart=!ThisKnotPart:~0,3!.!ThisKnotPart:~3!"
If exist "%subdir%\%thisknotpart%" (
set "Thisknot=%thisknotpart%"
) ELSE (
FOR /F "tokens=*" %%a in ('dir /b "%subdir%\%thisknotpart% *" 2^>nul') do set "thisknot=%%a"
IF Errorlevel 1 (
Echo Kein passendes Verzeichnis gefunden! Kopiere in "%ablageroot%\NEU" >>%LogFile%
(CALL :CopyWithRename %1 "%ablageroot%\NEU") & goto :eof
)
)
SET "subdir=%subdir%\%Thisknot%"
If %thisknotpart:.=% LSS %~n1 (Set /a len=%len%+1) & goto repeatGetLongDirname
ECHO Richtiges Verzeichnis fuer %1 gefunden: [%subdir%] ... wird jetzt kopiert >>%LogFile%
(call :CopyWithRename %1 "%subdir%" ) & goto :eof
--------
:CopyWithRename
Set "DatePrefix=%date%" & Set "TimeSuffix=%time%" & REM Namenserweiterungen für die zu kopierende Datei
FOR /F"tokens=2" %%i in ("%datePrefix%") do Set DatePrefix=%%i
FOR /F"tokens=1-3 delims=." %%i in ("%datePrefix%") do Set Dateprefix=%%k%%j%%i
FOR /F "tokens=1-3 delims=:," %%i in ("%time%") do Set "TimeSuffix=%%i%%j%%k"
Set "TimeSuffix=%TimeSuffix: =0%"
If NOT exist "%~2\%1" (
FOR %%a in (echo copy) do %%a %1 "%~2\%1" >>%LogFile%
) ELSE (
if NOT exist "%~2\%DatePrefix%_%~nx1" (
FOR %%a in (echo copy) do %%a %1 "%~2\%DatePrefix%_%~nx1" >>%LogFile%
) ELSE (
FOR %%a in (echo copy) do %%a %1 "%~2\%DatePrefix%_%~n1_%TimeSuffix%%~x1" >>%LogFile%
))
(Set "ExitLoop=Yes" ) & goto :eof
--------
>>> Anmerkung zum Formalcheck Nur-PDFs-mit-Ziffern-erlauben
Ok, der Formal-Check war nicht gefordert, aber wuerde ich schon machen.
Ich habe beschlossen, das erste Zeichen des *.pdf-Namens muss eine Ziffer zw. 1 und 9 sein.
Vielleicht MUSS es ja sogar eine "1" sein? Dann ginge natuerlich oben auch ein ('dir /b %meinroot%\1*.pdf').
Aber dann kaeme keine Warnmeldung.
<<<< Ende Anmerkung
--------snapp Pdf2AblageTestet.bat-------------
Probiers aus.
Meine Testumgebung war diese Verzeichnisstruktur ("L:\" entspricht Deinem "\Ablage")
Da gibt es die z.B. die Struktur 1\12\123\123.4 (jeweils mit oder ohne textliche Ergänzung).
L:\1 kategorie\12
L:\1 kategorie\14
L:\1 kategorie\13 Dreizehner
L:\1 kategorie\12\121
L:\1 kategorie\12\122
L:\1 kategorie\12\123 Hunnertund23
<b>L:\1 kategorie\12\123 Hunnertund23\123.4 erstes Ziel</b>
L:\1 kategorie\13 Dreizehner\131
L:\1 kategorie\13 Dreizehner\132
L:\1 kategorie\13 Dreizehner\134
L:\1 kategorie\13 Dreizehner\135 Hundert135er
L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3
L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3\135.33 135.3 Hundert135erPunkt3
L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3\135.33 135.3 Hundert135erPunkt3\135.225
<b>L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3\135.33 135.3 Hundert135erPunkt3\135.334 Zweites Ziel</b>
<b>1234.pdf</b> --> Ziel: soll in Ablage 1\12\123\123.4 bzw. <b>"1 kategorie\12\123 Hunnertund23\123.4 erstes Ziel"</b>
<b>135334.pdf</b> -> Ziel: 1\13\135\135.3\135.33\135.334
bzw <b>"L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3\135.33 135.3 Hundert135erPunkt3\135.334 Zweites Ziel"</b>
<b>solaris80.20.pdf</b> --> entspricht nicht den Konventionen - Wird nicht kopiert
Ein Mini-Logfile wird geschrieben ins %temp%-Verzeichnis.
Inhalt:
>type %temp%\pdf2AblageTestet.log
...
1234.pdf "L:\1 kategorie\12\123 Hunnertund23\123.4 erstes Ziel\20050911_1234_042629.pdf"
1 Datei(en) kopiert.
135334.pdf "L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3\135.33 135.3 Hundert135erPunkt3\135.334 Zweites Ziel\20050911_135334_042630.pdf"
1 Datei(en) kopiert.
Richtiges Verzeichnis fuer 1234.pdf gefunden: [L:\1 kategorie\12\123 Hunnertund23\123.4 erstes Ziel] ... wird jetzt kopiert
1234.pdf "L:\1 kategorie\12\123 Hunnertund23\123.4 erstes Ziel\20050911_1234_042713.pdf"
1 Datei(en) kopiert.
Richtiges Verzeichnis fuer 135334.pdf gefunden: [L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3\135.33 135.3 Hundert135erPunkt3\135.334 Zweites Ziel] ... wird jetzt kopiert
135334.pdf "L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3\135.33 135.3 Hundert135erPunkt3\135.334 Zweites Ziel\20050911_135334_042714.pdf"
1 Datei(en) kopiert.
Datei solaris80.20.pdf entspricht nicht den Konventionen der Ablage.
Keine Verarbeitung von solaris80.20.pdf.
..
Sollte Deinen Anforderungen entsprechen, wenn ich die richtig verstanden habe:
>In Zukunft soll die Datei 1234.pdf dann verschoben werden in
-"1 - Ordnername"
-|-"12 - haumichblau"
|-"123 - weißnixmehr"
|"123.4 - geschafft"
und heißt danach dann 20050826_123.4.pdf
-|-"12 - haumichblau"
|-"123 - weißnixmehr"
|"123.4 - geschafft"
und heißt danach dann 20050826_123.4.pdf
Sach mal Bescheid, ob es passt.
Frank / der Biber aus Bremen
[Edit] Was der Batch-Skizze oben noch fehlt, ist natürlich das Löschen/Verschieben der abgearbeiten *.PDF-Dateien.
Dazu muss noch in den CopyWithRename-Block eine neue vorletzte Zeile rein (vor dem (Set ExitLoop...),
die da sinngemäß del %1 heißt. Sollte kein Problem darstellen. [/Edit]