buxi
Goto Top

variabl. Dateinamen auslesen und in Batch-Datei an einen String anhängen

variablen Dateinamen aus bekanntem Verzeichnis auslesen in BAT-Datei an String anhängen und diese BAT-Datei dann wieder abspeichern

Hallo zusammen,
hier ein Problem, welches ich nicht lösen kann, da ich noch nicht zur
"Byte-Aristokratie" ;-D gehöre. Für eure Hilfe wäre ich wirklich dankbar.

System: Windows XP Tablet Edition, Win 2000 SP4 ( User haben ADMIN-Rechte )

Es muss auf jedem System eine Batchdatei funktionieren, die Nero BACK IT UP
per BATCH ausführt.
Die Nero-Job-Informationsdatei ist in einem bekannten Verzeichnis und hat
immer die Extension .nji. Der eigentliche Dateiname ist nach JahrMonatTag_Uhrzeit
aufgebaut:
Z.B.:
20060200009_151150.nji
Diese Bezeichnung kann auf jedem System variieren.
--- Hier der Inhalt der vorgefertigten BATCH-DATEI
--- Der String [Dateiname der Job-Informations-Datei].nji
--- soll durch das Auslesen des Verzeichnisses und ermitteln des
--- Dateinamens angehängt werden. Er ist in der BATCH also
--- nicht vorhanden
backitup.exe /NEW:BACKUP /FILEPATH:"C:\Dokumente und
Einstellungen\[Benutzername]\Anwendungsdaten\Ahead\Nero BackItUp\Info Files\[Dateiname der Job-Informations-Datei].nji"

Wie kann ich nun sicherstellen das aus dem Verzeichnis
C:\Dokumente und Einstellungen\[Benutzername]\Anwendungsdaten\Ahead\Nero BackItUp\Info Files\
die jüngste .nji Datei ( im Regelfall sollte nur eine vorhanden sein )
ermittelt werden kann ( erschwerend kommt hinzu, dass in dem Verzeichnis
noch einige .nbi und .txt Dateien existieren ).
Diese jüngste .nji Datei soll dann ausgelesen und an den String
in der BATCH-DATEI angehängt werden.
Diese BATCH-DATEI soll dann wieder abgespeichert werden.
Vielleicht gibt es ja auch einen einfacheren Weg ?

THX für euren Support vorab
Bin allerdings kein VB oder WSH oder C Programmierer

Content-ID: 25644

Url: https://administrator.de/contentid/25644

Ausgedruckt am: 23.11.2024 um 05:11 Uhr

Biber
Biber 10.02.2006 um 17:02:25 Uhr
Goto Top
Moin buxi,

ich würde diese Anforderung (wenn ich sie denn richtig verstanden habe), mit EINEM (allerdings mehrzeiligen) Batch abfackeln.

Einfachste Variante: ein manuell vom User zu startender Batch:

Vorbemerkung:
Schau mal bitte an den Rechnern, an denen das laufen soll, ob Du am CMD-Prompt bei Eingebe von "SET" eine geeignete Variable findest, in der schon der Pfad "C:\Dokumente.....\[Username]\" hinterlegt ist. Normalerweise heißt die Variable dafür USERPROFILE.
Beispiel: USERPROFILE=C:\Dokumente und Einstellungen\biber

In diesem Fall:

::---snipp BackupStartedByUser.bat----------------------------------------------------------------
@echo off & setlocal & Set "NjiPath=Anwendungsdaten\Ahead\Nero BackItUp\Info Files"  
for /F %%i in ('dir /b /A:-d /o:d "%USERPROFILE%\%NjiPath%\*.nji"') do Set "newestNji=%%i"  
backitup.exe /NEW:BACKUP /FILEPATH:"%USERPROFILE%\%NjiPath%\%newestNji%"  
::---snapp BackupStartedByUser.bat -------------------------------------------------------------
Aber ich würde normalerweise weggehen von diesem manuell zu startenden Batch und eher einen Batch alle x Minuten oder Stunden laufen lassen, der die jeweils jüngte *.nji-Datei sichert, falls dies noch nicht gesichert wurde.

::---snipp BackupStartedAsService.bat -------------------------------------------------------------
@echo off & setlocal & Set "NjiPath=Anwendungsdaten\Ahead\Nero BackItUp\Info Files"  
Set "ZentralesLogFile=\\server\freigabe\AlleGebackuptenNjis.log"  
for /F %%i in ('dir /b /A:-d /o:d "%USERPROFILE%\%NjiPath%\*.nji"') do Set "newestNji=%%i"  
If exist %zentralesLogFile% find "%username%%newestnji%" %zentralesLogFile% >nul && goto :eof  
backitup.exe /NEW:BACKUP /FILEPATH:"%USERPROFILE%\%NjiPath%\%newestNji%"  
if not ERRORLEVEL 1 echo %username%%newestnji% >>%zentralesLogFile%
::---snapp BackupStartedAsService.bat----------------------------------------------------------
Soweit die ungetesteten ersten Skizzen.

Schönes Wochenende
Biber
[Edit] Minor Bugfix siehe Posting unten. 13.2.2006 [/Edit]
buxi
buxi 13.02.2006 um 18:29:40 Uhr
Goto Top
Ich werd "eckig" ;-D - - Vielen, vielen Dank Biber für die Anschubprogrammierung --
Nun noch ein klitzekleines Problem in dem BATCH:
1. ::---snipp BackupStartedByUser.bat----------------------------------------------------------------
2. @echo off & setlocal & Set "NjiPath=Anwendungsdaten\Ahead\Nero BackItUp\Info Files"
3. for /F %i in ('dir /b /A:-d /o:d "%USERPROFILE%\%NjiPath%\*.nji"') do Set "newestNji=%%i"
4. backitup.exe /NEW:BACKUP /FILEPATH:"%USERPROFILE%\%NjiPath%\%newestNji%"
5. ::---snapp BackupStartedByUser.bat -------------------------------------------------------------

zu Zeile 2. : i. O. ( Umgebungsvariable ist unter WinXP Tablet-Edition "natürlich " vorhanden )
zu Zeile 3. : der DIR Befehle arbeitet soweit OK
hier der Inhalt wenn ich diesen String aus einer BATCH in dem Verzeichnis laufen lasse
20060802_122432.nji ---> klappt also
zu Zeile 4. : Irgendwie scheint der Parameterwert "newestNji" nicht übernommen zu werden
ich habe mal versucht diesen Wert mit ( Synthax richtig ? )
%newestNji% > newestNji.txt in der Batch in ein File zu schubsen, leider geht das nicht.

Vorsichtshalber zur Fehleranalyse habe ich ein PAUSE hinter jede BATCH-Zeile eingefügt.
- Zeile 2. läuft natürlich
- Zeile 3. der Dir Befehl läuft solo, also gehe ich davon aus, dass es auch in der FOR-Schleife funktionuckelt,
aber hier läuft die BATCH in das LEERE und beendet.
- Zeile 4. läuft in das LEERE innerhalb der BATCH ( oder vorher durch Zeile 3 )
( solo mit dem Aufruf 20060802_122432.nji anstatt %newestNji% geht die Zeile einwandfrei )
Biber, hast Du noch eine Idee ( Parameterübergabe .. )?
Danke jedem schon vorab für einige Infos .
Aber nochmals vielen Dank, das war soweit eine Klasse-Hilfe.

Gruß

Buxi
Biber
Biber 13.02.2006 um 19:29:10 Uhr
Goto Top
Ja, ja, Buxi,
und ich sach noch: "ungetestete Skizze"... *gg

In Zeile 3. habe ich ein einfaches Prozentzeichen statt eines doppelten gepostet
3. for /F %i in ('dir /b /A:-d /o:d ........--->FALSCH (richtig am CMD-Prompt, falsch im Batch)
Ich ändere das oben in Schnipsel auf
3. for /F %%i in ('dir /b /A:-d /o:d..... --->RICHTIGER im Batch.

Dann ist es zwar immer noch ungetestet, aber sollte besser laufen.

Grüße Biber