2017-12-17 4 views
1

So habe ich diesen Code zur Ausgabe der Dateigröße einer Datei, dann die Datei ersetzen und die Größe klicken Sie hier:Warum funktioniert der folgende Stapelcode nicht, wenn er in die IF-Anweisung eingefügt wird?

FOR %%A IN (%userprofile%\remove.me) DO (
    set size=%%~zA 
) 
pause 
echo before:%size% 
copy %userprofile%\copy.me %userprofile%\remove.me 
pause 
FOR %%B IN (%userprofile%\remove.me) DO (
    set size2=%%~zB 
) 
pause 
echo after:%size2% 
pause 
exit 

Es funktioniert völlig in Ordnung, aber wenn ich versuche, wenn die remove.me Datei zu überprüfen vorhanden es wird nicht geben die Dateigrößen vor der Ausführung des Codes:

if EXIST %userprofile%\remove.me (
FOR %%A IN (%userprofile%\remove.me) DO (
    set size=%%~zA 
) 
pause 
echo before:%size% 
copy %userprofile%\copy.me %userprofile%\remove.me 
pause 
FOR %%B IN (%userprofile%\remove.me) DO (
    set size2=%%~zB 
) 
pause 
echo after:%size2% 
pause 
exit 
) 

es wird nur sagen,

vor:

nach:

ohne die Dateigrößen. Wenn ich versuche, die Klammern innerhalb des Codes zu entfernen, der von der if-Anweisung ausgeführt wird, wird nur zurückgegeben, dass (C: \ Users \ Myaccountname \ remove.me) nicht der Syntax folgt.

Ich kann nicht herausfinden, warum das passiert und wie das zu beheben ist. Verurteile mich nicht, ich bin neu zu Chargen .-.

+0

versuchen, mit 'wenn EXIST "% userprofile% \ remove.me"' und 'FOR %% A IN ("% userprofile % \ remove.me ")' – npocmaka

+0

@npocmaka nichts geändert:/ – Temm

+0

Ooh brauchen Sie verzögerte Erweiterung – npocmaka

Antwort

0

Sie ändern und den Zugriff auf Wert in Klammern context.So Sie benötigen delayed expansion

setlocal enableDelayedExpansion 
if EXIST "%userprofile%\remove.me" (
    FOR %%A IN ("%userprofile%\remove.me") DO (
     set size=%%~zA 
    ) 
    pause 
    echo before:!size! 
    copy "%userprofile%\copy.me" "%userprofile%\remove.me" 
    pause 
    FOR %%B IN ("%userprofile%\remove.me") DO (
     set size2=%%~zB 
    ) 
    pause 
    echo after:!size2! 
    pause 
    exit 

) 
+0

mit diesem Code schließt die Batch-Konsole sofort nach dem Ausführen "setlocal enableDelayedExpansion":/ – Temm

+0

@Temm - überprüfen Sie es jetzt. Durch Unfall habe ich die letzte schließende Klammer außerhalb des Codeblocks gelassen. – npocmaka

Verwandte Themen