chris-koehne
Goto Top

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

Content-ID: 14948

Url: https://administrator.de/forum/variablen-und-wildcards-14948.html

Ausgedruckt am: 23.12.2024 um 18:12 Uhr

Biber
Biber 26.08.2005 um 10:48:03 Uhr
Goto Top
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
chris-koehne
chris-koehne 26.08.2005 um 11:16:05 Uhr
Goto Top
Hi Frank,

habs mir schon gedacht, dass das mit dem * so nicht klappt. Nochmal ein wenig detailierter mein Problem.

Es gibt folgende (nicht durch mich festgelegte) Ordnerstruktur:

- 1
- 12
- 13
- 131
- 135
- 135.3
- 135.31
- 135.33
- 135.336

Im Input Verzeichnis liegt nun eine Datei mit dem Namen 135336.pdf. Diese soll per Batch in den Ordner \..\135.336 verschoben werden, das klappt auch soweit alles schon ganz gut.
Jetzt kommts aber: Irgendwann einmal (wahrscheinlich morgen face-wink ) wünscht man sich die Odnernamen etwas aussagekräftiger benennen zu können. Der Anfang, also 1, 13, 135, 135.3, etc bleiben so bestehen. Danach soll es aber möglich etwas in dieser Form anzuhängen:

- 1 - Haumichblau
- 12 - nochmalbeschreib

Die würde mein Bästelchen zerhauen. Ich muss es schaffen, dass nur die Zahl am Anfang relevant für den move ist.

Gruß, Chris
chris-koehne
chris-koehne 26.08.2005 um 11:30:55 Uhr
Goto Top
Oh, ich sehe gerade, dass meine Einrückungen der Verzeichnisse nicht angenommen wurden. Es sieht so aus:
- 1
12
13
131
135
135.3
135.31
135.33
135.336

Hi Frank,

habs mir schon gedacht, dass das mit dem *
so nicht klappt. Nochmal ein wenig
detailierter mein Problem.

Es gibt folgende (nicht durch mich
festgelegte) Ordnerstruktur:

- 1
- 12
- 13
- 131
- 135
- 135.3
- 135.31
- 135.33
- 135.336

Im Input Verzeichnis liegt nun eine Datei
mit dem Namen 135336.pdf. Diese soll per
Batch in den Ordner \..\135.336 verschoben
werden, das klappt auch soweit alles schon
ganz gut.
Jetzt kommts aber: Irgendwann einmal
(wahrscheinlich morgen face-wink ) wünscht
man sich die Odnernamen etwas
aussagekräftiger benennen zu
können. Der Anfang, also 1, 13, 135,
135.3, etc bleiben so bestehen. Danach soll
es aber möglich etwas in dieser Form
anzuhängen:

- 1 - Haumichblau
- 12 - nochmalbeschreib

Die würde mein Bästelchen
zerhauen. Ich muss es schaffen, dass nur die
Zahl am Anfang relevant für den move
ist.

Gruß, Chris
Biber
Biber 26.08.2005 um 12:37:16 Uhr
Goto Top
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
chris-koehne
chris-koehne 26.08.2005 um 15:56:19 Uhr
Goto Top
Hi Biber,

du hast recht, ziemlich schräges Ablagesystem. Dies gibt es so aber schon seit etwa 15 Jahren und es gibt eine 300-seitige Doku dazu face-wink

Du hast es richtig verstanden. Eine Date namens 1234.pdf läuft in das Verzeichnis input. Durch mein Bästelchen wird der Dateiname jetzt zerlegt in
1, 12, 123, 123.4 (dies ist dann die rdnerstruktur, wenn ich nur die Backslashe dabei packe).
Die Datei wird nun in den Ordner
-1
-|-12
|-123
|123.4
verschoben und heißt danach dann 20050826_123.4.pdf

Kommt jetzt eine zweite Datei (am gleichen Tag) namens 1234.pdf im Input Ordner an wird wieder gerupft und die Datei landet im gleichen Ordner, nur mit dem Namen
20050826_123.4_153326.pdf (Timestamp angehangen)

Falls ein Ordner nicht existiert wird dieser automatisch - zwar an anderer Stelle (Unterordner NEU) - angelegt und die Datei dann dorthin verschoben.

Alles arbeitet soweit ganz gut, nur die Sache mit den sich änderden Ordnernamen ist so 'ne Sache.

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

Das Bätschelein soll heute so gebastelt werden, dass im alles hinter dem Ordneridentifier (1, 12, 123, 123.4, etc.) egal ist.

Gruß, Chris
Biber
Biber 26.08.2005 um 16:16:39 Uhr
Goto Top

back-to-top*LAAAAAAAAAAAAACCCCHHT*

@chris
Du 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
chris-koehne
chris-koehne 26.08.2005 um 16:54:32 Uhr
Goto Top
Biber,

danke für dein Mitgefühl face-wink ! Du hast rechr, wer sich das ausgedacht hat gehört bestraft, aber ...

Nun ja, wenn dir etwas einfällt wäre das super!

Danke, Chris
Biber
Biber 26.08.2005 um 16:55:53 Uhr
Goto Top
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
Biber
Biber 11.09.2005 um 05:19:18 Uhr
Goto Top
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 face-wink )

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>
In diese Struktur werden die 3 Test-Pdfs kopiert
<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


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]