Variablen lassen sich nicht in TXT abspeichern.
Hi,
ich hab mir eine Batchdatei gebaut die Dateinamen nach datum ausliest und in einer txt abspeichert.
Das peroblem ist jetzt mittels echo kann ich mir die dateinamen zwar anzeigen lassen aber sie lassen sich nicht in die TXT schreiben. Variable d und e sollen in die txt.
Vorschläge?
ich hab mir eine Batchdatei gebaut die Dateinamen nach datum ausliest und in einer txt abspeichert.
Das peroblem ist jetzt mittels echo kann ich mir die dateinamen zwar anzeigen lassen aber sie lassen sich nicht in die TXT schreiben. Variable d und e sollen in die txt.
Vorschläge?
@ECHO OFF
Setlocal EnableExtensions
setlocal EnableDelayedExpansion
for /f "tokens=1-4 delims=. " %%a in ('date /t') do (
set "aktdat=%%c%%b%%a"
echo !aktdat!
)
for /f "tokens=1-3,7,8 delims=. " %%a in ('dir /a-d E:\vds\meteo-rechnungen\') do (
if %aktdat% lss %%c%%b%%a (
echo %%d.%%e > datum.txt )
)
pause
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 65327
Url: https://administrator.de/contentid/65327
Ausgedruckt am: 22.11.2024 um 13:11 Uhr
11 Kommentare
Neuester Kommentar
Moin ooAlbert,
Vorschläge hätte ich...
Hauptsächlich sollte die untere FOR-Anweisung modifiziert werden.
Desweiteren decken sich Beschreibung des Schnipsels und der Inhalt des Schnipsel nicht vollständig..
...ich hab mir eine Batchdatei gebaut ...
Jepp.
...die Dateinamen nach datum ausliest
Das kann ich nicht sehen.
/a-d bedeutet: "mit Attribut: kein Directory".
Das ist auch sinnvoll.
Aber "nach Datum" wäre
/o:d bedeutet "mit Order: nach Datum"
Der zusätzliche "/-c"-Parameter gibt die Datei-Größe ohne Tausenderpunkte aus, was mir/uns ermöglicht, die beiden Summenzeilen (soundsoviel Dateien, soundsoviel Verzeichnisse) wegzufiltern bzw. wegzuFINDen.
Dennoch bleibt das Problem, dass damit durch die LESS-Bedingung
Also Dateien, die ab morgen erstellt werden sozusagen.
Das sind oft nicht viele.
...works as designed.. sage ich dann immer.
Wenn Du aus dem LSS ein LEQ (kleiner oder gleich) machst,
dann siehst Du wenigstens die Dateien von heute.
Grüße
Biber
Vorschläge hätte ich...
Hauptsächlich sollte die untere FOR-Anweisung modifiziert werden.
@ECHO OFF
Setlocal EnableExtensions
setlocal EnableDelayedExpansion
Set "mydir=E:\vds\meteo-rechnungen\"
Set "out=datum.txt"
REM ------hier eine Anpassung --nächsten 2 Zeilen bitte löschen
set "out=con:"
set "myDir=D:\temp\"
REM ------Ende Anpassung --
for /f "tokens=1-4 delims=. " %%a in ('date /t') do (
set "aktdat=%%c%%b%%a"
echo !aktdat!
)
for /f "tokens=1-3,6* delims=. " %%a in ('dir /a-d /-c %myDir%^|find "."') do (
if %aktdat% lss %%c%%b%%a (
echo %%d.%%e >> %Out% )
)
pause
Desweiteren decken sich Beschreibung des Schnipsels und der Inhalt des Schnipsel nicht vollständig..
...ich hab mir eine Batchdatei gebaut ...
Jepp.
...die Dateinamen nach datum ausliest
Das kann ich nicht sehen.
/a-d bedeutet: "mit Attribut: kein Directory".
Das ist auch sinnvoll.
Aber "nach Datum" wäre
/o:d bedeutet "mit Order: nach Datum"
Der zusätzliche "/-c"-Parameter gibt die Datei-Größe ohne Tausenderpunkte aus, was mir/uns ermöglicht, die beiden Summenzeilen (soundsoviel Dateien, soundsoviel Verzeichnisse) wegzufiltern bzw. wegzuFINDen.
Dennoch bleibt das Problem, dass damit durch die LESS-Bedingung
...if %aktdat% LSS %%c%%b%%a
...nur Dateien angezeigt werden mit einem Änderungsdatum größer heute.Also Dateien, die ab morgen erstellt werden sozusagen.
Das sind oft nicht viele.
...works as designed.. sage ich dann immer.
Wenn Du aus dem LSS ein LEQ (kleiner oder gleich) machst,
dann siehst Du wenigstens die Dateien von heute.
Grüße
Biber
[Nachtrag]
Ach ja, eben erst gesehen:
Wenn Du die erste FOR-Anweisung so änderst:
...
dann kannst Du auch auf das "Setlocal EnableDelayedExpansion" verzichten.
Falls die eigentliche Frage aber hinreichend beantwortet ist, setz bitte den Beitrag.. bla bla...
Danke
Biber
Ach ja, eben erst gesehen:
Wenn Du die erste FOR-Anweisung so änderst:
for /f "tokens=1-3 delims=. " %%a in ('date /t') do set "aktdat=%%c%%b%%a"
echo %aktdat%
dann kannst Du auch auf das "Setlocal EnableDelayedExpansion" verzichten.
Falls die eigentliche Frage aber hinreichend beantwortet ist, setz bitte den Beitrag.. bla bla...
Danke
Biber
Moin ooAlbert,
das geschieht, weil der "SET /A"-Befehl werte mit führender Null gemäß der Dokumentation ( Set /?) als Oktalwerte auffasst.
Oktalwerte mit "0" am Anfang gehen natürlich nur von "00", "01"....bis "07".
"08" ist keine gültige Oktalzahl.
Ist etwas ausführlicher erklärt und rauf und runter diskutiert ist es u.a. hier im MSCEBoard.
Grüße
Biber
das geschieht, weil der "SET /A"-Befehl werte mit führender Null gemäß der Dokumentation ( Set /?) als Oktalwerte auffasst.
Oktalwerte mit "0" am Anfang gehen natürlich nur von "00", "01"....bis "07".
"08" ist keine gültige Oktalzahl.
Ist etwas ausführlicher erklärt und rauf und runter diskutiert ist es u.a. hier im MSCEBoard.
Grüße
Biber
<grinz> Doch, ooAlbert,
ist alles korrekt und es wird etwas gemacht...works as designed...
Der kleine Unterschied zu Deinem ersten Ansatz mit SET /a ist:
Da kann nie herauskommen, dass die Bedingung erfüllt ist.
Dass Du etwas anderes meinst, kann der CMD-Interpreter nicht erkennen.
Grüße
Biber
ist alles korrekt und es wird etwas gemacht...works as designed...
Der kleine Unterschied zu Deinem ersten Ansatz mit SET /a ist:
- mit SET /A hast Du erzwungen, dass die Variable %monat% als "arithmetische Variable behandelt werden soll. Und eine arithmetische Größe "08" oder "09" grätscht nun mal ab.. siehe oben,
- aber jetzt erzwingst Du nicht... und der Text 08 wird mit 0 verglichen.....
Da kann nie herauskommen, dass die Bedingung erfüllt ist.
Dass Du etwas anderes meinst, kann der CMD-Interpreter nicht erkennen.
Grüße
Biber