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
GELÖST

3 Batchfiles verstehen

Frage Entwicklung Batch & Shell

Mitglied: ColdZero89

ColdZero89 (Level 1) - Jetzt verbinden

21.08.2012 um 14:10 Uhr, 3937 Aufrufe, 30 Kommentare

Moin,

dritter Anlauf diese Frage zu schreiben (Einmal IE weg, anderes Mal Tab geschlossen -.-)

Ich habe 3 Batchfiles bekommen die bisher auf gewissen PCs im Einsatz sind. Diese wurden mir als Bespiel gegeben, da ich ein Batch schreiben soll das ähnliches können soll. Was diese allgemein Tun weiß ich, was diese im Script Schritt für Schritt machen, versteh ich so gut wie null.

Was tun die 3 Batches?
Eins legt meines Erachtens Time Jobs an (unter XP)
Die 2 anderen unterscheiden sich, tun aber auch irgendwo dasselbe (Fragt mich nicht).
Allgemein wird in einen Ordner gegangen in dem Fortlaufend eine XML Datei von einem Programm mit Werten gefüttert wird. Alle 2 Stunden geht eine Batch hin, nimmt sich die XML und zieht sie sich und verpackt sie.
Fürs Verständnis
Ich soll mit dem Beispiel dieser Batches ein Batch schreiben was (so geplant bisher) in die XML geht und die Werte der letzten Stunde nimmt und in eine neue XML schmeißt und diese sogleich verpackt.
Die Readme zu den Batches
These batches are a demo implementation for automatic file handling on the SCDI Plant-PC.

They should be installed at c:\program files\conergy\SCDIA\scdi batch and will process data in c:\SCDIA_DATA.

You should modify the install_timed_jobs.bat for your own needs and start it once, if you need automatic file handling.

The 'At' command therein will periodically start the zip_and delete.bat.

When adjusting the 'At' times, make sure not to hit the SCDIA file write time (e.g. 10:00, 10:15, 10:30, 10:45...), as then SCDIA will have problems writing the files.

Needs 7-zip to be installed.
For remote transfer of files, you need to install or configure a ftp server.
The batchs are build for english time and date format mm/dd/yyyy
Batch install_timed_jobs (Nennen wir es Batch1)
01.
@echo off 
02.
 
03.
rem install automatic scdi file handling 
04.
rem make sure to not hit a work-time slot of SCDIA (normally full hour, 15, 30, 45 mins past) 
05.
 
06.
rem use this line for once-a-day-transfer 
07.
at 00:10 /EVERY:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 cmd /c "%ProgramFiles%\conergy\scdia\scdi batch\zip_and_delete.bat" c:\scdia_data 
08.
 
09.
rem add these lines for multiple transfers per day. Notice the different batch calls  
10.
at 06:10 /EVERY:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 cmd /c "%ProgramFiles%\conergy\scdia\scdi batch\zip_and_delete_all.bat" c:\scdia_data 
11.
at 08:10 /EVERY:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 cmd /c "%ProgramFiles%\conergy\scdia\scdi batch\zip_and_delete_all.bat" c:\scdia_data 
12.
at 10:10 /EVERY:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 cmd /c "%ProgramFiles%\conergy\scdia\scdi batch\zip_and_delete_all.bat" c:\scdia_data 
13.
at 12:10 /EVERY:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 cmd /c "%ProgramFiles%\conergy\scdia\scdi batch\zip_and_delete_all.bat" c:\scdia_data 
14.
at 14:10 /EVERY:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 cmd /c "%ProgramFiles%\conergy\scdia\scdi batch\zip_and_delete_all.bat" c:\scdia_data 
15.
at 16:10 /EVERY:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 cmd /c "%ProgramFiles%\conergy\scdia\scdi batch\zip_and_delete_all.bat" c:\scdia_data 
16.
at 18:10 /EVERY:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 cmd /c "%ProgramFiles%\conergy\scdia\scdi batch\zip_and_delete_all.bat" c:\scdia_data 
17.
at 20:10 /EVERY:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 cmd /c "%ProgramFiles%\conergy\scdia\scdi batch\zip_and_delete_all.bat" c:\scdia_data 
18.
 
19.
rem to remove jobs, type "at /delete"
Batch zip_and_delete (Nennen wir es Batch2)
01.
@echo off 
02.
 
03.
rem called by "at" jobs 
04.
rem zips the past day's xml files in the directory and deletes them on success 
05.
rem needs date format mm/dd/yyyy 
06.
 
07.
set scdia_out_directory=%1 
08.
if "%scdia_out_directory%" neq "" goto start 
09.
 
10.
set scdia_out_directory=.. 
11.
 
12.
:start 
13.
 
14.
if "%scdia_out_directory%" equ "" goto end 
15.
 
16.
setlocal enableextensions 
17.
 
18.
for /f "tokens=2-4 delims=/ " %%i in ('date /t') do set today=%%k_%%i_%%j 
19.
 
20.
for %%T in (%scdia_out_directory%\*.xml) do  (  
21.
 
22.
	if not %today% equ %%~nT ( 
23.
		rem process only files from past days 
24.
		echo process %%~nT.xml 
25.
		( ren "%%T" "%%~nT._xml" ) 
26.
 
27.
		rem uses zip format 
28.
		rem ( "%ProgramFiles%\7-zip\7z.exe" a -tzip "%scdia_out_directory%\%%~nT.zip" "%scdia_out_directory%\%%~nT._xml" && del "%scdia_out_directory%\%%~nT._xml" ) 
29.
		rem uses 7-zip format, half file size 
30.
		( "%ProgramFiles%\7-zip\7z.exe" a "%scdia_out_directory%\%%~nT.7z" "%scdia_out_directory%\%%~nT._xml" && del "%scdia_out_directory%\%%~nT._xml" ) 
31.
 
32.
	) else ( 
33.
		echo leaving alone %%~nT.xml 
34.
35.
36.
endlocal 
37.
 
38.
:end
Batch zip_and_delete_all (Nennen wir es Batch3)
01.
@echo off 
02.
 
03.
 
04.
 
05.
rem called by "at" jobs 
06.
rem zips all xml files in the directory and deletes them on success 
07.
 
08.
set scdia_out_directory=%1 
09.
if "%scdia_out_directory%" neq "" goto start 
10.
 
11.
set scdia_out_directory=.. 
12.
 
13.
:start 
14.
 
15.
if "%scdia_out_directory%" equ "" goto end 
16.
 
17.
setlocal enableextensions 
18.
 
19.
FOR /f "tokens=1-3 delims=: " %%G IN ('time /t') DO set timestring=%%G_%%H%%I 
20.
 
21.
for %%F IN (%scdia_out_directory%\*.xml)  DO ren "%%F" "%%~nF_%timestring%._xml" 
22.
 
23.
rem uses zip format 
24.
rem for %%F IN (%scdia_out_directory%\*._xml) DO "%ProgramFiles%\7-zip\7z.exe" a -tzip "%scdia_out_directory%\%%~nF.zip" "%%F" && del "%%F" 
25.
rem uses 7-zip format, half the file size 
26.
for %%F IN (%scdia_out_directory%\*._xml) DO "%ProgramFiles%\7-zip\7z.exe" a "%scdia_out_directory%\%%~nF.7z" "%%F" && del "%%F" 
27.
 
28.
endlocal 
29.
 
30.
:end
Würde mich freuen wenn die Scripte ein wenig verständlicher Aussehen (Auch einfacher) könnte oder einfach nur mir - nett wäre Zeile für Zeile - erklärt werden könnte.

Danke im Vorraus.

Gruß Zero
30 Antworten
Mitglied: 76109
21.08.2012 um 14:47 Uhr
Hallo Zero!

dritter Anlauf diese Frage zu schreiben (Einmal IE weg, anderes Mal Tab geschlossen -.-)
Seit mir das am Anfang auch 2-3 passiert ist, schreibe ich meine Texte zuvor ganz entspannt in einem Texteditor

Gruß Dieter
Bitte warten ..
Mitglied: ColdZero89
21.08.2012, aktualisiert um 15:21 Uhr
Moin didi,

ja so hab ichs auch geamcht xD das war mir dann zu dumm

Sehe ich eigentlich richtig das auch VBS in einem der Batchfiles platz gefunden hat?

Gruß Zero
Bitte warten ..
Mitglied: 76109
21.08.2012 um 15:31 Uhr
Hallo Zero!

Nö, VBS kann ich nicht entdecken, aber das Erklären überlasse ich lieber den Batch-Profis...

Gruß Dieter
Bitte warten ..
Mitglied: ColdZero89
21.08.2012 um 15:41 Uhr
Moin,

ok danke, wunderte mich nur wegen diesem "setlocal" hab das bisher nur dann gesehen wenn VBS mit im Spiel war.

Warten wir mal ab, vielleicht gibts es wen der sich die Mühe macht. Weil ich finde das echt übelst verwirrend

Gruß Zero
Bitte warten ..
Mitglied: Penny.Cilin
21.08.2012 um 15:49 Uhr
Zitat von ColdZero89:
Moin,

ok danke, wunderte mich nur wegen diesem "setlocal" hab das bisher nur dann gesehen wenn VBS mit im Spiel war.

Setlocal ist schon seit W2K bei Batches möglich. Einfach mal in der Eingabeaufforderung
setlocal /?
eingeben und dann den Hilfetext lesen.


Gruss Penny.
Bitte warten ..
Mitglied: SlainteMhath
21.08.2012 um 15:57 Uhr
Moin,

Zitat von ColdZero89:
Warten wir mal ab, vielleicht gibts es wen der sich die Mühe macht...
Mal ganz ehrlich: meinst du wirklich du bekommst jetzt hier ~70 Batchcode Zeile für Zeile vorgekaut? Versuch's doch mal selbst, und wenn du zu einzelnen Befehlen/Zeilen konkrete Fragen hast dann stell sie hier.

lg,
Slainte
Bitte warten ..
Mitglied: ColdZero89
21.08.2012, aktualisiert um 16:27 Uhr
Moin,

nein nicht Zeile für Zeile aber so ein wildes durcheinander vllt mal aufbrechen.
Ich hab nur immer grob was mit Batch zu tun gehabt, aber das was beispielsweise in Zeile 18 von Batch 2 steht. Dieses ganze %%.
Oder in Batch 2 allgemein, ich steig da null durch. Woher weiß das System wo der Dateipfad ist? Da steht nix von einem Pfad. Oder neq equ ? herrjeh in was für einer bedeutung steht das zu dem anderen kram.

Darum gehts mir und solltest du andere Beiträge von mir gelesen haben, dürftest du wissen ich probiere sowas immer zu erst selbst. Ist einfach ein besseres gefühl sich sowas selbst zu erarbeiten, nur da scheitere ich vorne und hinten.

Edit: Außerdem wenn ich meine Zeile für Zeile dürfte eigentlich jedem klar sein das ich den kram mit "Echo" und dieses rem gedöns nicht meine, sondern da wo es zur sache geht.

Edit2: Ok setlocal hatte ich allgemein nichtmal nachgeschaut, aber dass das zu Batch gehört, das hät ich netmal erraten x) dafür habs ichs halt immer nur in verbindung zu Batch mit VBS gesehen ^_^ Danke schau ich mir aber ma an.

Gruß Zero
Bitte warten ..
Mitglied: Biber
21.08.2012, aktualisiert um 19:23 Uhr
Moin ColdZero89,

du musst es auch nicht Zeile für Zeile lesen oder mit der Uhrmacherlupe draufgucken.

Tritt bitte im der ersten Phase der Reinfummelns in die Thematik zwei Schritte zurück, glaub fest an das Gute im Menschen (der die Bätche zusammengeschrotet hat) und lies nur die Kommentare

Im Batch "Eins", der alles andere direkt oder über Bande startet, steht:

01.
... 
02.
rem install automatic scdi file handling  
03.
 
04.
rem make sure to not hit a work-time slot of SCDIA (normally full hour, 15, 30, 45 mins past 
05.
...
--> dieser Schnipsel richtet ein paar AT-Jobs ein (=AT-Jobs sind per Kommandozeile eingerichtete zeitgesteuerte Aufgaben, siehe AT/? am CMD)

--> und diese Jobs sollen möglichst dann starten, wenn die SCDIA-Applikation nicht beschäftigt ist. Und das ist sie im Viertelstunden-Takt.

Deshalb werden die AT-Jobs z.B. um 10 Minuten nach einer vollen Stunde eingerichtet.

Damit weisst du schonmal, was denn der Plan gewesen ist bzw was eigentlich passieren sollte beim Aufruf des Bätches.

Der Rest ist über die Hilfe am CMD-Prompt rauszubekommen (AT /?, Setlocal /? etc.)

Grüße
Biber
Bitte warten ..
Mitglied: SlainteMhath
22.08.2012 um 06:52 Uhr
Biber hat's mir vorweg genommen:
Der Rest ist über die Hilfe am CMD-Prompt rauszubekommen (AT /?, Setlocal /? etc.)

Und dann gibt es auch Seiten wie diese auf denen man die Funktionsweise und den Syntax der einzelnen Befehle nachlesen kann.

Ansonsten gibts hier im Forum auch das ein oder andere sehr gute Batch-Tutorial.

lg,
Slainte
Bitte warten ..
Mitglied: bastla
22.08.2012 um 08:49 Uhr
... und wenn Du beim Nachforschen jeweils mit dem ersten Wort einer Zeile beginnst - etwa mit "if /?" - hast Du auch gar keine so schlechte Chance, zB etwas über "neq" oder "equ " zu erfahren ...

Wenn dieses erste Wort ein "for" sein sollte, kann ich wärmstens (nicht nur bei der aktuellen Wetterlage) friemlers Tutorial zur FOR-Schleife empfehlen ...

Grüße
bastla
Bitte warten ..
Mitglied: ColdZero89
22.08.2012 um 09:22 Uhr
Moinsen Moinsen,

das is doch auch eine Hilfe stupser in die richtige Richtung ^_^
Werd mich damit mal befassen, bzw muss ja auch irgendwo
Bitte warten ..
Mitglied: ColdZero89
22.08.2012, aktualisiert um 09:33 Uhr
Moin,

mit den Tipps von euch sieht das schon ganz anders aus, das Script fängt an Sinn zu machen.

Was mir bisher aber null schlüssig ist und wird, ist Batch 2 Zeile 22 woher weiß der was %%~nT ist? Wie kann der %today% (Auch ohne was zu finden, wirds wahrscheinlich das Heutige Datum wiedergeben (Frage ist nur ob mit oder ohen Zeit)) mit %%~nT vergleichen, wenn nirgendswo steht welchen Inhalt %%~nT hat?

Auch bei if /? hab ich dazu nix gefunden.

Edit: Btw ich hab schon gegooglet. Nur finden tu ich wenn ich den Snippet "%%~nT" eingebe nur Windows NT bla, selbst mit "Batch %%~nT" finde ich nix. Manchmal ist Batch doch schlimmer wie gewisse Inseln der Programmiersprache xD

Gruß Zero
Bitte warten ..
Mitglied: bastla
22.08.2012, aktualisiert um 09:47 Uhr
Hallo ColdZero89!

Zum "%%~nT"-Mysterium: Nicht immer wird %I als Schleifenvariable verwendet - hier ist es eben %T; dann gilt aber das, was Du in der Hilfe zu "for" (ziemlich am Ende) findest:
%~nI        - Erzeugt nur den Dateinamen von %I.
(dass in Batch die Laufvariablen der "for"-Schleife mit "%%" geschrieben werden müssen, weißt Du ja sicher schon).

Die Variable %today% wird übrigens in Zeile 18 zusammengebaut - allerdings für ein englisches Datumsformat (und für W2000) - um ein Ergebnis der Form "JJJJ_MM_TT" zu erhalten, wäre
set "today=%date:~-4%_%date:~-7,2%_%date:~-10,2%"
besser (siehe dazu "set /?") ...

Grüße
bastla
Bitte warten ..
Mitglied: ColdZero89
22.08.2012 um 10:13 Uhr
Moin,

ah danke bastla, ja das nI hab ich gesehen aber nicht beachtet da ich halt nach nT gesucht habe. Aber danke

Zeile 18 - gar nicht gesehen am ende das dort today gesetzt wird... aber allgemein wird ja das Datumsformat wie angegeben in Zeile 5 benötigt "rem needs date format mm/dd/yyyy"

Soweit ich weiß von einem Kollegen sind die Systeme auch auf Englische Zeit was das angeht umgestellt - frag mich net wieso, es ist so und da diese Systeme von einem Dienstleister gestellt werden, gibts da auch nix dran zu rütteln. (grml)

Aber solangsam splittet sich mir das ganze geschehen mal auf. Danke nochmal Bastla

Gruß Zero
Bitte warten ..
Mitglied: bastla
22.08.2012 um 10:22 Uhr
Hallo ColdZero89!
aber allgemein wird ja das Datumsformat wie angegeben in Zeile 5 benötigt "rem needs date format mm/dd/yyyy"
Als Ausgangsformat ja - aber in %today% steht es dann doch als "YYYY_MM_DD"; das kannst Du aber ja ohnehin sehen, wenn Du den Batch mit "echo on" anstatt "echo off" ausführst, oder zB eine Zeile
echo today=%today%
einbaust ...

Einfacher (aber nicht übersichtlicher) kommst Du an die Variablenwerte, indem Du im Batch eine Zeile
set & pause
für alle Variablen oder zB
set t & pause
für alle mit "t" beginnenden Variablennamen einbaust ...

Grüße
bastla
Bitte warten ..
Mitglied: ColdZero89
22.08.2012 um 10:53 Uhr
Moin,

in Batch 3 Zeile 21, dort werden die Dateni in JJJJ_MM_TT_HH_MM umbenannt - zumindestens hole ich diese so vom Server. Die Variable F beinhaltet scheinbar das Datem und der Timestrnig enthält die Zeit, aber wo wird denn F mit dem Datum gesetzt?
Bin ich nur wieder zu blind oder steht das da tatsächlich nicht?

Gruß Zero
Bitte warten ..
Mitglied: bastla
22.08.2012 um 11:11 Uhr
Hallo ColdZero89!
Die Variable F beinhaltet scheinbar das Datem und der Timestrnig enthält die Zeit
Nein; in %%F stehen der Reihe nach die .xml-Dateien, die dann umbenannt werden, indem (nur) der Timestamp dem Namen hinzugefügt wird (das Datum müsste also zu diesem Zeitpunkt bereits Teil des Dateinamens sein) ...

Grüße
bastla
Bitte warten ..
Mitglied: ColdZero89
22.08.2012 um 11:34 Uhr
Moin,

ah ok, da muss ich mal Rücksprache mit dem Kollegen halten, der das Programm kennt, das die XML Datein schreibt. Ok dann ist das auch aufgeklärt.

Danke

Gruß Zero
Bitte warten ..
Mitglied: ColdZero89
22.08.2012, aktualisiert um 15:17 Uhr
Moin,

eins was mir grad einfällt das mit immer noch nicht schlüssig ist: woher weiß das Batch in Batch 2 und 3 in zeile 7 und 8 was %1 ist? Womit wird das gefüllt und vorallem woher kommt wenn die Info?

Ein Punkt der mir halt überhaupt net aufgeht.

EDIT: Ich habs grad selbst entdeckt. Die Timejobs übergeben einen Pfad => %1, somit alles aufgeklärt.

Wunderbar

Gruß und Danke Zero
Bitte warten ..
Mitglied: Penny.Cilin
22.08.2012 um 16:00 Uhr
Halli hallo hallöle Coldzero89,


bei den 3 Skripten bin ich auch am rätseln gewesesn.
Das Bätscheln ist halt nicht so einfach. Und schon garnicht, wenn man noch nie oder sehr selten damit zu tun hat.

Wie auch immer, daß hast Deine Fragen gelöst bekommen.


Gruß Penny.
Bitte warten ..
Mitglied: pieh-ejdsch
22.08.2012, aktualisiert um 20:55 Uhr
moin Zero,

bei ein klein wenig Aufklärung hilft Dir auch dieses Script (nicht nur beim Finden von Fehlern):
Batchcode erstellen - Fehler im Batch leichter finden

Gruß Phil
Bitte warten ..
Mitglied: ColdZero89
23.08.2012 um 08:55 Uhr
Moin,

danke

Ja, so nach und nach kleine Unschlüssigkeiten aufgeklärt und man fängt leicht an es zu verstehen, ich versteh nicht alles, bzw verstehen was es tut ja, aber wieso halt - nicht komplett, dennoch so nach und nach irgendwie sicherlich ^_^

z.B. Batch 3 Zeile 19 und 21.
01.
FOR /f "tokens=1-3 delims=: " %%G IN ('time /t') DO set timestring=%%G_%%H%%I  
02.
for %%F IN (%scdia_out_directory%\*.xml)  DO ren "%%F" "%%~nF_%timestring%._xml"
Beides schleifen, wieso aber brauch man für die erste Schleife mit dem Timestring eine Schleife? In meinem Kopf reicht es Theoretisch Timestring einfach zu setzen und PENG

Die zweite Schleife verstehe ich - denke ich - soweit, bin mri nur nicht sicher.
Die Schleife mit %%F ließt alle Datein mit der Endung .xml in dem Ordner ein und benennt diese mit der Variablen "timestring" um. Wieso nun aber in der Umbenennung der Datei der Hauptname über %%~nF aufgerufen wird, erschließt sich mir nicht.

Gruß Zero
Bitte warten ..
Mitglied: bastla
23.08.2012, aktualisiert um 12:49 Uhr
Hallo ColdZero89!
wieso aber brauch man für die erste Schleife mit dem Timestring eine Schleife?
Da "time /t" nun mal ein Befehl ist, brauchst Du die Schleife zum Abfangen und Zerlegen der Ausgabe - lässt sich allerdings auch über die Variable %time% machen:
01.
set "timestring=%time:~,2%_%time:~3,2%%time:~6,2%" 
02.
set "timestring=%timestring: ="%
Die zweite Zeile ist nötig, um das Leerzeichen am Anfang bei einstelligen Stunden zu entfernen bzw auf Wunsch auch mit
set "timestring=%timestring: =0"%
durch 0 zu ersetzen ...
Wieso nun aber in der Umbenennung der Datei der Hauptname über %%~nF aufgerufen wird, erschließt sich mir nicht.
Es soll ja der neue Name aus dem alten Namen + %timestring% gebildet werden - daher brauchst Du eben auch den alten Namen ohne Typ (.xml; wird ja am Ende noch hinzugefügt) - etwas besser wäre übrigens
for %%F in (%scdia_out_directory%\*.xml)  DO ren "%%F" "%%~nF_%timestring%%%~xF"
oder
for %%F in (%scdia_out_directory%\*.xml)  DO ren "%%F" "%%~nF_%timestring%.*"
- damit wird der Typ automatisch übernommen ...

Noch ein Hinweis zum Testen: In vielen Fällen kannst Du eine Zeile auch direkt in CMD eingeben, um Dir den Ablauf anzusehen, wobei ein "echo" vor "gefährlichen" Befehlen dafür sorgt, dass diese nur angezeigt werden - hier zB
for %F in (%scdia_out_directory%\*.xml)  DO @echo ren "%F" "%~nF_%timestring%%~xF"
Zu beachten ist dabei, dass die Schleifenvariablen bei Direkteingabe nur mit einem Prozentzeichen zu schreiben sind (deswegen auch zB "%~nF" und "%~xF").

Grüße
bastla
Bitte warten ..
Mitglied: ColdZero89
23.08.2012, aktualisiert um 10:05 Uhr
Moin und danke bastla,

ah das heißt also durch das einlesen der Dateinamen (Zweite Zeile aus dem Post über bastla) und das aufrufen durch %~nF oder %~xF wird der komplett Zerteilt (in Dateiname und Dateiendung) um eben dort die Zeit zwischen zu packen. - Solangsam kapiere ich

Ganzen Namen einlesen - Test.xml -> Namen zerteilen in Dateiname und Endung - Test und xml -> Zeit dazwischen einfügen und neuer Dateiname geschaffen - Test_9_35.xml.

Cool, da ich die Datein nun in XML abspeichere, werde ich das mit xF wahrscheinlich nutzen.
Verstanden? Check

Ok und aus der timestring Zeile: Ah, er lässt sich die Zeit wie in ner Normalen ausgabe anzeigen um diese zu zerlegen und einzelnd einzulesen. Was bedeutet aber %%H%%I? wie gibt der das wieder nud dreht es, ohne zu sagen (Also mitgeteilt bekommen - somit ohne zu wissen) was stunden und was minuten sind?

Gruß Zero
Bitte warten ..
Mitglied: bastla
23.08.2012 um 11:07 Uhr
Hallo ColdZero89!

Die einzelnen Tokens (aufgrund der Delimiter entstandenen Teile) werden einfach in alphabetischer Reihenfolge zur Verfügung gestellt - im konkreten Fall bei Schleifenvariable %%G ist daher der erste Teil %%G, der zweite Teil %%H, ...

Grüße
bastla
Bitte warten ..
Mitglied: ColdZero89
23.08.2012, aktualisiert um 11:20 Uhr
Moin,

ah ja klar -.- Token 1-3, ok. Dieser ganze Tokenkram verwirrt mich immernoch. Wobei ich jedesmal vergesse, dass das ne Schleife ist und was daraus folgt... danke ^_^

EDIT: Ah und wie ich gerade mit dem echo bei direkter eingabe ein wenig rumexperimentiert habe hängt die Angabe der "Platzhalter" (G, H, I) von dem Platzhalter ab der als erstes genannt wird (hier G). Wenn man G durch A ersetzt, muss H durch B ersetzt werden. So langsam - herrjeh - raucht mein kopf aber ich versteh es auch so langsam.
Ebenfalls merkte ich das I gar nicht benötigt wird - ändert nichts an der Ausgabe. Gibt es für %I einen Grund? oder ist das einfach nur so hingeschrieben für eventuelle Sekunden? (Ich weiß es sind 3 Tokens die durchlaufen, aber theoretisch müssten es doch nur 2 sein, oder seh ich das Falsch? Durch time /t wird doch nur 11:19 wiedergegeben und nicht noch Sekunden.

Gruß Zero
Bitte warten ..
Mitglied: Penny.Cilin
23.08.2012 um 12:33 Uhr
halli hallo hallöle,

Es ist die Frage wie Du die aktuelle Uhrezeit ermittelst.
Ich kenne einmal folgende Möglichkeit:
FOR /F "tokens=*" %I IN ('TIME /T') DO Echo Es ist jetzt %I Uhr 
und zum anderen die Möglichkeit mittels TIME und danach die die Stunden, Minuten, Sekunden aufzudröseln.
    Set HH=%TIME:~0,2% 
    Set MM=%TIME:~3,2% 
    Set SS=%TIME:~6,2%
Wobei die zweite Methode das Problem hat, daß bei deutscher Zeit die führende NULL nicht angezeigt wird.


Gruss Penny.
Bitte warten ..
Mitglied: bastla
23.08.2012, aktualisiert um 12:50 Uhr
@Penny.Cilin

Schön langsam wird's hier unübersichtlich (sonst wäre Dir vermutlich mein Kommentar da oben aufgefallen ) ...

Grüße
bastla
Bitte warten ..
Mitglied: bastla
23.08.2012, aktualisiert um 12:55 Uhr
Hallo ColdZero89!
Gibt es für %I einen Grund? oder ist das einfach nur so hingeschrieben für eventuelle Sekunden? (Ich weiß es sind 3 Tokens die durchlaufen, aber theoretisch müssten es doch nur 2 sein, oder seh ich das Falsch? Durch time /t wird doch nur 11:19 wiedergegeben und nicht noch Sekunden.
Die 3 Tokens beziehen sich vermutlich auf eine Zeitangabe der Art "11:19 AM" - ansonsten hast Du recht, dass es eigentlich nur Tokens für Stunde und Minute bräuchte (die Variable "%time%" bietet im Gegensatz dazu sogar Hundertstelsekunden) ...

Grüße
bastla
Bitte warten ..
Mitglied: ColdZero89
23.08.2012 um 13:09 Uhr
Moinsen,

ah ok das kann natürlich sein. Erklärt es auch, vorrausdenkend der/die Mann/Frau der/die das geschrieben hat

Nun versteh ich das solangsam auch und bastla, danke für den Tip mit Echo und der direkten EIngabe, es macht vieles um so vieles verständlicher

Was mir dabei aufgefallen ist: Ruft mein ein Script - wenn es funktioniert man dennoch alle parameter mal sehen will - über Call PFAD\SCRIPT auf, sieht man auch Zeile für Zeile, was da ab geht, so hat man das Script dann im "Fluss" des ausführenden Scriptes.

Gruß Zero
Bitte warten ..
Neuester Wissensbeitrag
Microsoft

Lizenzwiederverkauf und seine Tücken

(5)

Erfahrungsbericht von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (18)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (16)

Frage von Fiasko zum Thema Windows Netzwerk ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...