Batch goto funktioniert nicht.

Darthz55

Newbie
Registriert
Jan. 2013
Beiträge
5
Hallo zusammen
brauche bei der Erstellung einer Batchfile unter Win 7 Unterstützung,
hab schon einiges probiert aber ohne Erfolg.
Folgende Aufgabe:
Eine Datei Größe ermitteln wenn größer als X dann verschieben und Umbenennen mit Datumstempel.
Das verschieben und Umbenennen klappt aber die IF Bedingung mit goto funktioniert nicht,
im Batch wird egal Ergebnis alles abgearbeitet.
Vielen Dank für eure Unterstützung.

Und so sieht mein Batchfile aus.

for %F in ("C:\test\test.txt ") do set dateigroesse=%~zF
if %dateigroesse% == 64 (goto ver) else goto ende


:ver
FORFILES /P C:\test /M Test.txt /C "CMD /C MOVE @FILE C:\cfg"
ren C:\cfg\test.txt Test_"%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%-%TIME:~0,2%.%TIME:~3,2%-%TIME:~6,2%".txt


:ende
exit
 
Code:
if %dateigroesse% == 64 goto ver else goto ende

ohne klammern und statt gleich == besser größergleich verwenden.
 
Zuletzt bearbeitet:
D0m1n4t0r schrieb:
ohne klammern und statt gleich == besser größergleich verwenden.
Die Klammern sind hier zwar überflüssig, aber stören dürften die nicht.

Allerdings sollte die Schleife wohl eher so aussehen:
Code:
for %%F in ("C:\test\test.txt") do set dateigroesse=%%~zF
Also zwei "%" bei der Schleifenvariable, das ist ein Unterschied zwischen der Anwendung von der Befehlszeile aus oder aus einer Batch-Datei heraus. Das Leerzeichen am Ende des Dateinamens ist wohl ebenfalls nicht beabsichtigt.
 
Danke für die Tipps werde heute Abend direkt ausprobieren und berichten.
Ergänzung ()

Hallo gerade ausprobiert und bekomme diese Fehlermeldung.

"%%F" kann syntaktisch an dieser Stelle nicht verarbeitet werden.


noch eine Idee?
 
Hallo,

eigentlich egal wichtig ist mir nur das ich es über den Windows Aufgabenplaner einmal Täglich ausführen kann.
Ergänzung ()

Hier nochmal die komplette Kommandozeile.

C:\Users>for %F in ("C:\test\test.txt") do set dateigroesse=%~zF

C:\Users>set dateigroesse=64

C:\Users>if %dateigroesse% == 63 goto ver else goto ende

C:\Users>
C:\Users>
C:\Users>:ver
C:\Users>FORFILES /P C:\test /M Test.txt /C "CMD /C MOVE @FILE C:\cfg"

1 Datei(en) verschoben.

C:\Users>ren C:\cfg\test.txt Test_"%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%-%TIME:~0,
2%.%TIME:~3,2%-%TIME:~6,2%".txt

C:\Users>
C:\Users>
C:\Users>:ende
C:\Users>timeout /t 5
 
Darthz55 schrieb:
Danke für die Tipps werde heute Abend direkt ausprobieren und berichten.
Ergänzung ()

Hallo gerade ausprobiert und bekomme diese Fehlermeldung.

"%%F" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Anscheinend hast Du mein Posting nicht verstanden.

Die doppelten "%" brauchst Du nur innerhalb einer Batch-Datei. Von der Kommandozeile aus funktionieren die nicht, dann kommt nämlich genau der von Dir genannte Fehler. Also noch einmal:
Batch-Datei: "%%" bei Schleifenvariablen
Kommandozeile: "%" bei Schleifenvariablen

Siehe auch die Doku von Microsoft:
https://technet.microsoft.com/de-de/library/bb490909.aspx
Use %variable to carry out for from the command prompt. Use %%variable to carry out the for command within a batch file.
 
Zuletzt bearbeitet:
Hallo Andreas_

wer lesen kann ist klar im vorteil.Bin halt ein Newbie:)
Jetzt hab ich es Verstanden und Siehe da es klappt :)
Hab es immer aus der Kommandozeile heraus probiert.
Und jetzt mit doppelten "%" und aus der Batch-Datei heraus funktioniert es wunderbar.

Nochmals vielen Dank
Ein Super Forum
 
So gehts im Powershell... deine Anpassungen noch reinmachen; als PS1 abspeichern und im task scheduler reinhängen; fertig

Habs auch getestet, siehe anhang.

Beim reinhängen als PS dran denken, dass du ggf. die execution policy setzen musst

https://docs.microsoft.com/en-us/po...urity/set-executionpolicy?view=powershell-5.1

Würde eh keine Scripte mehr mit Batch schreiben, solange es nicht unbedingt notwendig ist.


$source_folder = 'C:\Exporte_CEE\Exports'
$files = Get-ChildItem $source_folder
$target_folder = 'C:\Exporte_CEE\TargetFolder'

$size = '6000000' #critical size

$cur_Time = Get-date -Format "yyyyMMddHHmmss"


$files | foreach {

if ($_.Length -gt $size) {


Move-Item (Join-Path $source_folder -ChildPath $_) -Destination $target_folder

Rename-Item (Join-Path $target_folder -ChildPath $_) -NewName ($cur_Time + '_' + $_.Name)
}
}
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    161,4 KB · Aufrufe: 444
Zuletzt bearbeitet:
Super!
klappt auch mit Powershell.

Nochmals Danke an alle für die Unterstützung.:)
 
Zurück
Oben