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

Variablen und Wildcards???

Frage Entwicklung Batch & Shell

Mitglied: chris-koehne

chris-koehne (Level 1) - Jetzt verbinden

26.08.2005, aktualisiert 11.09.2005, 7193 Aufrufe, 9 Kommentare

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
Mitglied: Biber
26.08.2005 um 10:48 Uhr
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
Bitte warten ..
Mitglied: chris-koehne
26.08.2005 um 11:16 Uhr
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 ) 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
Bitte warten ..
Mitglied: chris-koehne
26.08.2005 um 11:30 Uhr
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 ) 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
Bitte warten ..
Mitglied: Biber
26.08.2005 um 12:37 Uhr
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
Bitte warten ..
Mitglied: chris-koehne
26.08.2005 um 15:56 Uhr
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

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
Bitte warten ..
Mitglied: Biber
26.08.2005 um 16:16 Uhr

*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
Bitte warten ..
Mitglied: chris-koehne
26.08.2005 um 16:54 Uhr
Biber,

danke für dein Mitgefühl ! 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
Bitte warten ..
Mitglied: Biber
26.08.2005 um 16:55 Uhr
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
Bitte warten ..
Mitglied: Biber
11.09.2005 um 05:19 Uhr
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------
01.
@echo off & setlocal EnableDelayedExpansion & setlocal 
02.
<b>SET "meininputdir=d:\temp2"   & REM  .. bei chris: set meinroot=c:\input 
03.
SET "ablageroot=L:"           & REM bei chris: set copyroot=c:\ablage</b> 
04.
SET LogFile="%temp%\%~n0.log" 
05.
PUSHD %ablageroot%\ 
06.
IF NOT EXIST "%ablageroot%\NEU" MD "%ablageroot%\NEU" 
07.
FOR /f %%i IN ('dir /b %meininputdir%\*.pdf') DO CALL :loop %%i 
08.
POPD & GOTO :eof 
09.
-------Ende Hauptteil - End of Batch 
10.
:loop 
11.
If [%ExitLoop%]==[YES] set "ExitLoop=NO" & goto:eof 
12.
SET "PDFFileName=%1" 
13.
:Formalcheck Nur-PDFs-mit-Ziffern-erlauben 
14.
for %%a in (1 2 3 4 5 6 7 8 9) do if [%PDFFileName:~0,1%]==[%%a] goto :FormalCheckOk 
15.
echo Datei %1 entspricht nicht den Konventionen der Ablage. >>%LogFile% 
16.
echo Keine Verarbeitung von %1.>>%LogFile% 
17.
goto :eof  
18.
-- Ende Formalcheck Nur-PDFs-mit-Ziffern-erlauben-Block siehe >>> Anmerkung unten 
19.
:FormalCheckOk 
20.
(SET    "subdir=%ablageroot%") & Set /a "len=1"  
21.
 
22.
:repeatGetLongDirname 
23.
set ThisKnotpart=!PDFFileName:~0,%len%! 
24.
If %len% GTR 3 set "ThisKnotPart=!ThisKnotPart:~0,3!.!ThisKnotPart:~3!" 
25.
If exist "%subdir%\%thisknotpart%" ( 
26.
  set "Thisknot=%thisknotpart%" 
27.
) ELSE (   
28.
  FOR /F "tokens=*" %%a in ('dir /b "%subdir%\%thisknotpart% *" 2^>nul') do set "thisknot=%%a" 
29.
  IF Errorlevel 1 (  
30.
    Echo Kein passendes Verzeichnis gefunden! Kopiere in "%ablageroot%\NEU" >>%LogFile% 
31.
    (CALL :CopyWithRename %1 "%ablageroot%\NEU") & goto :eof  
32.
33.
34.
SET "subdir=%subdir%\%Thisknot%" 
35.
If %thisknotpart:.=% LSS %~n1 (Set /a len=%len%+1) & goto repeatGetLongDirname  
36.
ECHO Richtiges Verzeichnis fuer %1 gefunden: [%subdir%] ... wird jetzt kopiert >>%LogFile% 
37.
(call :CopyWithRename %1 "%subdir%" ) & goto :eof 
38.
-------- 
39.
 
40.
:CopyWithRename 
41.
Set "DatePrefix=%date%" & Set "TimeSuffix=%time%"  & REM Namenserweiterungen für die zu kopierende Datei  
42.
FOR /F"tokens=2" %%i in ("%datePrefix%") do Set DatePrefix=%%i 
43.
FOR /F"tokens=1-3 delims=." %%i in ("%datePrefix%") do Set Dateprefix=%%k%%j%%i 
44.
FOR /F "tokens=1-3 delims=:," %%i in ("%time%") do Set "TimeSuffix=%%i%%j%%k" 
45.
Set "TimeSuffix=%TimeSuffix: =0%" 
46.
If NOT exist "%~2\%1" ( 
47.
   FOR %%a in (echo copy) do %%a %1 "%~2\%1" >>%LogFile% 
48.
) ELSE ( 
49.
   if NOT exist "%~2\%DatePrefix%_%~nx1" ( 
50.
      FOR %%a in (echo copy) do %%a %1 "%~2\%DatePrefix%_%~nx1" >>%LogFile% 
51.
   ) ELSE ( 
52.
     FOR %%a in (echo copy) do %%a %1 "%~2\%DatePrefix%_%~n1_%TimeSuffix%%~x1" >>%LogFile% 
53.
   )) 
54.
(Set "ExitLoop=Yes" ) & goto :eof 
55.
-------- 
56.
>>> Anmerkung zum Formalcheck Nur-PDFs-mit-Ziffern-erlauben  
57.
Ok, der Formal-Check war nicht gefordert, aber wuerde ich schon machen. 
58.
Ich habe beschlossen, das erste Zeichen des *.pdf-Namens muss eine Ziffer zw. 1 und 9 sein. 
59.
Vielleicht MUSS es ja sogar eine "1" sein? Dann ginge natuerlich oben auch ein ('dir /b %meinroot%\1*.pdf'). 
60.
Aber dann kaeme keine Warnmeldung. 
61.
<<<< Ende Anmerkung 
62.
--------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).

01.
L:\1 kategorie\12 
02.
L:\1 kategorie\14 
03.
L:\1 kategorie\13 Dreizehner 
04.
L:\1 kategorie\12\121 
05.
L:\1 kategorie\12\122 
06.
L:\1 kategorie\12\123 Hunnertund23 
07.
<b>L:\1 kategorie\12\123 Hunnertund23\123.4 erstes Ziel</b> 
08.
L:\1 kategorie\13 Dreizehner\131 
09.
L:\1 kategorie\13 Dreizehner\132 
10.
L:\1 kategorie\13 Dreizehner\134 
11.
L:\1 kategorie\13 Dreizehner\135 Hundert135er 
12.
L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3 
13.
L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3\135.33 135.3 Hundert135erPunkt3 
14.
L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3\135.33 135.3 Hundert135erPunkt3\135.225 
15.
<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
01.
<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> 
02.
<b>135334.pdf</b> -> Ziel: 1\13\135\135.3\135.33\135.334  
03.
bzw <b>"L:\1 kategorie\13 Dreizehner\135 Hundert135er\135.3 Hundert135erPunkt3\135.33 135.3 Hundert135erPunkt3\135.334 Zweites Ziel"</b> 
04.
<b>solaris80.20.pdf</b>  --> entspricht nicht den Konventionen - Wird nicht kopiert
Ein Mini-Logfile wird geschrieben ins %temp%-Verzeichnis.

Inhalt:
01.
>type %temp%\pdf2AblageTestet.log 
02.
... 
03.
1234.pdf "L:\1 kategorie\12\123 Hunnertund23\123.4 erstes Ziel\20050911_1234_042629.pdf" 
04.
        1 Datei(en) kopiert. 
05.
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" 
06.
        1 Datei(en) kopiert. 
07.
Richtiges Verzeichnis fuer 1234.pdf gefunden: [L:\1 kategorie\12\123 Hunnertund23\123.4 erstes Ziel] ... wird jetzt kopiert 
08.
1234.pdf "L:\1 kategorie\12\123 Hunnertund23\123.4 erstes Ziel\20050911_1234_042713.pdf" 
09.
        1 Datei(en) kopiert. 
10.
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 
11.
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" 
12.
        1 Datei(en) kopiert. 
13.
Datei solaris80.20.pdf entspricht nicht den Konventionen der Ablage. 
14.
Keine Verarbeitung von solaris80.20.pdf. 
15.
..
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]
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
Batch & Shell
gelöst Variablen Zusammenbauen 2.0 ( Batch ) (6)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst FOR Loop Variablen ( Batch ) (2)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst Grosses Variablen Problem ( Batch) (30)

Frage von clragon zum Thema Batch & Shell ...

VB for Applications
Auswahlliste mit variablen (3)

Frage von Roadrunner777 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

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

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...