Wie kann ich zwei variable Nummern mit IF vergleichen?
Guten Tag,
ich versuche seit Stunden eine if zum Laufen zu bringen.
Es geht darum zwei Zahlen miteinander zu vergleichen, für eine Loop. Der User soll angeben wie viele Durchläufe die Loop machen soll. Anschließend wird die Counter-Variable auf 1 gesetzt.
Nachher folgt die :loop. In dieser soll zu erst mittels if geschaut werden, ob sie nochmals die Befehle ausführen soll oder eben nicht. Wenn also der Counter kleiner oder gleich der Anzahl der Durchläufe ist, werden Befehle ausgeführt, der Counter +1 gemacht und springt wieder zur :loop. Ansonsten Exit.
Der Code sieht in etwa so aus:
Ich habe schon alles Mögliche versucht. Verschiedene Schreibweisen des if's (Vergleichsoperator, if not, %variable%, "%variable%", !variable!, ...)
Zudem habe ich mit Pause versucht den Fehler zu finden. Habe ihn nicht gefunden, nur festgestellt, dass alles bis auf die if funktioniert. Auch %amount% und %counter% werden richtig abgespeichert, also bei der Ausgabe kommt das heraus, was herauskommen soll...
Ich bin mittlerweile ratlos. Habt ihr vielleicht eine Idee?
Vielen Dank,
Dissi-xD
ich versuche seit Stunden eine if zum Laufen zu bringen.
Es geht darum zwei Zahlen miteinander zu vergleichen, für eine Loop. Der User soll angeben wie viele Durchläufe die Loop machen soll. Anschließend wird die Counter-Variable auf 1 gesetzt.
Nachher folgt die :loop. In dieser soll zu erst mittels if geschaut werden, ob sie nochmals die Befehle ausführen soll oder eben nicht. Wenn also der Counter kleiner oder gleich der Anzahl der Durchläufe ist, werden Befehle ausgeführt, der Counter +1 gemacht und springt wieder zur :loop. Ansonsten Exit.
Der Code sieht in etwa so aus:
set /p amount="Wie viele Durchläufe soll die Schleife machen? (1, 2, 3, ...) "
set /a counter=1
:loop
if %counter% LEQ %amount% (
echo Ich führe Befehle aus.
set /a "counter+=1"
goto :loop
) else (
exit
)
Ich habe schon alles Mögliche versucht. Verschiedene Schreibweisen des if's (Vergleichsoperator, if not, %variable%, "%variable%", !variable!, ...)
Zudem habe ich mit Pause versucht den Fehler zu finden. Habe ihn nicht gefunden, nur festgestellt, dass alles bis auf die if funktioniert. Auch %amount% und %counter% werden richtig abgespeichert, also bei der Ausgabe kommt das heraus, was herauskommen soll...
Ich bin mittlerweile ratlos. Habt ihr vielleicht eine Idee?
Vielen Dank,
Dissi-xD
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2911578408
Url: https://administrator.de/contentid/2911578408
Ausgedruckt am: 25.11.2024 um 04:11 Uhr
14 Kommentare
Neuester Kommentar
Moin,
mir fällt spontan deine Zeile 7 auf.
Du verwendest hier
Ferner würde es so mehr Sinn ergeben:
gruß
em-pie
Edit:
mir fällt spontan deine Zeile 7 auf.
Du verwendest hier
counterl
und nicht counter
Ferner würde es so mehr Sinn ergeben:
set /p amount="Wie viele Durchläufe soll die Schleife machen? (1, 2, 3, ...) "
set /a counter=1
:loop
if %counter% LEQ %amount% (
echo Ich führe Befehle aus.
set /a counter=%counter%+1
goto loop
) else (
exit
)
gruß
em-pie
Edit:
goto loop
korrigiertZitat von @Dissi-xD:
Das Problem ist eben, dass ich das jeden Monat machen muss. Jedes mal mit dem neuen Ordner bzw. bei dem aktuellen Skript soll es verschiedene ältere Ordner durchsuchen und kopieren. Zudem möchten meine Kollegen auch das Programm, falls ich mal fehle. Und für die ist es einfacher, wenn sie nur "ein paar Zahlen eingeben müssen".
Das Problem ist eben, dass ich das jeden Monat machen muss. Jedes mal mit dem neuen Ordner bzw. bei dem aktuellen Skript soll es verschiedene ältere Ordner durchsuchen und kopieren. Zudem möchten meine Kollegen auch das Programm, falls ich mal fehle. Und für die ist es einfacher, wenn sie nur "ein paar Zahlen eingeben müssen".
Auch das geht doch alles....
$NameFolder = Read-Host "Geben Sie den Ordnernamen an:"
$folder = "c:\myFolderWithPDFs\$NameFolder"
$ALLPDF = Get-ChildItem -Path $folder\* -Include *.PDF
foreach ($PDF in $ALLPDF) {
write-host "Dateiname: $PDF.Fullname"
}
Zitat von @em-pie:
Fehler Nummer zwei:
du schreibst
es müsste aber
Edit: habe es oben von dir falsch mitkopiert ^^
P.S. beschäftige dich, wenn du gerade am Beginn deiner Scripting-Karriere unter Windows stehen solltest, direkt mit der Powershell
Fehler Nummer zwei:
du schreibst
goto :loop
es müsste aber
goto loop
lautenEdit: habe es oben von dir falsch mitkopiert ^^
P.S. beschäftige dich, wenn du gerade am Beginn deiner Scripting-Karriere unter Windows stehen solltest, direkt mit der Powershell
Das ist nicht das Problem. GoTo :Loop ist schon korrekt. Mache ich auch immer.
@Dissi-xD
@Dissi-xD
Mache in der Schleife mache jedem Befehl ein Echo und Pause.
Dan siehst Du wo das Problem ist.
:loop
if %counter% LEQ %amount% (
echo Ich führe Befehle aus.
(echo counter ist %counter% und amount ist %amount% & pause)
set /a counter=%counter%+1
(echo nach der berechnung counter ist %counter% & pause)%
goto :loop
) else (
exit
)
Gruss Penny.
Ich vermute 2 Zeilen erklären das auch.
@echo off
for /l %%i in (1,1,10) do (
set "foo=bar%%i"
echo mach was mit %foo%
)
echo versus:
setlocal EnableDelayedExpansion
for /l %%i in (1,1,10) do (
set "foo=bar%%i"
echo mach was mit !foo!
)
pause
Wenn's unbedingt Batch sein soll, muss man sich mit solchen Absonderlichkeiten auseinandersetzen ¯\_(ツ)_/¯
Steffen