Wie kann ich in Batch aus 2 For loops beide Werte in eine Variable schreiben?

1 Antwort

Um Variablen innerhalb von Klammern effektiv verwenden zu können, musst du den Befehl "Setlocal EnableDelayedExpansion" vorher einmalig verwendet haben und die Variablen mit ! statt mit % aufrufen.

Außerdem hast du einen Formelfehler drin, hier der Code mit richtiger Formel:

Setlocal EnableDelayedExpansion
FOR /L %%y in (0,1,19) DO (
  FOR /L %%x in (0,1,57) DO (
    set /a Progress=^(%%y * 58 + %%x + 1^) * 100/1160
    echo !Progress!%%
  )
)

Die ^ vor den Klammern ermöglichen ihre Nutzung auch innerhalb des FOR-Befehls, ohne dass CMD denkt, die schließende Klammer würde FOR schließen.

Ohne FOR-Befehl und ohne SETLOCAL geht das wie folgt:

set mmy=-1
:loop_y
if %mmy%==19 goto EndLoop
set mmx=-1
set /a mmy+=1
:loop_x
  set /a mmx+=1
  set /a Progress=(%mmy% * 58 + %mmx% + 1) * 100/1160
  echo %Progress%%%
  if %mmx%==57 goto loop_y
goto loop_x
:EndLoop

Über FOR ist der Prozess aber erheblich schneller.

oops, da warst du schneller als ich. ich hab mir fast die finger blutig gegoogelt, bis ich das mit dem "Setlocal EnableDelayedExpansion" gefunden habe.

finde ich ziemlich krank. also nicht deine lösung, sondern was sich MS da ausgedacht hat.

ich würde dem fragesteller dringlichst empfehlen, auf visual basic script (VBS) umzusteigen. das hat man schneller gelernt, als man das for-kommando verstanden hat. und ist besser dokumentiert.

auch wenns auch seine eigenheiten hat.

0

Passwort Batch File?

Hi ich hab ne Frage wegen einem Batch file:

cls
@ECHO OFF
title Folder Private
if EXIST "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" goto UNLOCK
if NOT EXIST Private goto MDLOCKER
:CONFIRM
echo Are you sure you want to lock the folder(Y/N)
set/p "cho=>"
if %cho%==Y goto LOCK
if %cho%==y goto LOCK
if %cho%==n goto END
if %cho%==N goto END
echo Invalid choice.
goto CONFIRM
:LOCK
ren Private "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
attrib +h +s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
echo Folder locked
goto End
:UNLOCK
echo Enter password to unlock folder
set/p "pass=>"
if NOT %pass%== 123 goto FAIL
attrib -h -s "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}"
ren "Control Panel.{21EC2020-3AEA-1069-A2DD-08002B30309D}" Private
echo Folder Unlocked successfully
goto End
:FAIL
echo Invalid password
goto end
:MDLOCKER
md Private
echo Private created successfully
goto End
:End

Ich hätte gerne, dass ich das Passwort mit dem ich den Ordner verschlüssele auswählen kann jedes mal wenn ich ihn verschließe und es nicht schon vorher im Code vermerken muss. Die Batch soll sich dieses Passwort also merken können, auch wenn sie geschlossen wird. Habe es schon mit set/p "password=>" und %password% probiert geht aber auch nicht. Danke für einen schnelle Antwort.

...zur Frage

Ist CMD/Batch eine Programmiersprache? Und wenn nicht, gibt es eine, welche ganz ähnlich ist oder darauf aufbaut?

...zur Frage

@echo off funktioniert nicht?

Ich habe ein Batch Datei und @echo off funktioniert nicht hier die Datei . Ich habe TicTacToe und das Quiz mal weg gelassen.

@echo off title Game

set /a try1=3 set /a try2=3 set /a try3=3 set /a try4=3 set /a try5=3

echo. echo. echo ------------ echo. echo Hallo hier koennen sie Spiele spielen. echo. echo ------------ timeout /t 3 >NUL goto auswahl :auswahl cls echo. echo. echo ------------ echo. echo 1.)TicTacToe echo. echo 2.)Quiz echo. echo ------------ set /p game= if %game% == 1 goto TicTacToe if %game% == 2 goto Quiz cls echo. echo. echo. echo. echo. echo. echo. echo Bitte gib eine Zahl ein die darueber steht. timeout -t 2 >NUL goto auswahl :TicTacToe title TicTacToe :main

set z1=1 set z2=2 set z3=3 set z4=4

............. Das gehört nicht dazu erst wieder das Quiz

:Quiz set /a try1=3 set /a try2=3 set /a try3=3 set /a try4=3 set /a try5=3 cls echo. echo ------------ echo. echo Quiz echo. echo ------------ timeout -t 3 >NUL set /p name=Dein Name: echo Ok %name%. Viel Glueck. timeout -t 2 >NUL goto frage1 :frage1 cls echo. echo Noch %try1% Versuch/e echo ------------ echo. echo Frage 1: Warum war der erste Mikrochip im Jahre 1969 eine Sensation? echo.

...zur Frage

Wo liegt der Fehler in der Batch datei?

Hey. Ich setzte mich gerade mit Batch Dateien auseinander bin aber noch nicht so weit. Gerade versuche ich eine Website Pinger zu bauen. Der geht aber nicht wodran liegt der Fehler? Wahrscheinlich ist es ein recht offensichtlicher Fehler den nur ich net sehe.

:START
@echo off
cls
title Website Pinger
echo.
echo Bitte trage die Website ein die du anpingen moechtest
echo.
set /p website= Bitte trage deine Website Domain/IP ein:
echo.
echo IP Adresse:
ping %website%
echo.
echo.
echo Moechten sie die angegebende Website Oeffnen? (j / n)
set /p wahl=
if '%wahl%'=='n' goto START
if '%wahl%'=='j' goto oeffnen
:oeffnen
iexplore.exe %website%

LG Ben

...zur Frage

Batch - Ausgabe von 29 Random Zahlen (KEINE GLEICHEN)

Hi :)

Ich bin gerade dabei eine Batch zu machen die 29 unterschiedliche zufällige Zahlen in ein Textdokument ausgeben soll.

Also habe ich etwas wie das gemacht:

set /a Begrenzung=0
:start1
set /a Begrenzung=%Begrenzung%+1
IF %Begrenzung% == 30 GOTO finish

:start2
set /a Zahl=%random% %%29
FINDSTR /C:%Zahl% Zahlen.txt
IF ERRORLEVEL 0 GOTO start2 
IF ERRORLEVEL 1 echo %Zahl% >> Zahlen.txt & GOTO start1

:finish
echo Vorgang abgeschlossen! 
pause >nul

Aber es schreibt nur maximal 21 Zahlen in die Datei und ab da nicht weiter...

Gibt es eine Möglichkeit so etwas anders zu machen?

...zur Frage

wie kann ich diese batch datei besser bzw anderes schreiben?

@echo off

color 02 

title jump

:start

cls

echo niemals S druecken 

echo.

echo _________________________________________________

echo.

echo.

echo.

echo.

echo ________0________________________________________

echo.

choice /c:wds /m "druecke W um zu springen und D um nachforne zu gehen:"

if %errorlevel%==1 goto jump

if %errorlevel%==2 goto forward

if %errorlevel%==3 goto gameover

pause

:forward

cls

echo.

echo.

echo _________________________________________________

echo.

echo.

echo.

echo.

echo _________0_______________________________________

echo.

choice /c:wa /m "druecke W um zu springen und A um nachforne zu gehen:"

if %errorlevel%==1 goto jumpp

if %errorlevel%==2 goto start 

:jump

cls

echo.

echo.

echo _________________________________________________

echo.

echo.

echo.

echo     0

echo _________________________________________________

echo.

goto time 

:time

ping localhost >nul

goto start 

:jumpp

cls

echo.

echo.

echo _________________________________________________

echo.

echo.

echo.

echo     0

echo _________________________________________________

echo.

ping localhost >nul

goto forward

:gameover

cls

echo.

echo.

echo _________________________________________________

echo.

echo.

echo.

echo.

echo ________0________________________________________

echo.

ping localhost >nul

cls

echo niemals S druecken 

echo.

echo _________________________________________________

echo.

echo.

echo.

echo     0 

echo ________ ________________________________________

echo.

ping localhost >nul

cls

echo niemals S druecken 

echo.

echo _________________________________________________

echo.

echo.

echo.

echo.      

echo ________0________________________________________

echo.

ping localhost >nul

cls

echo niemals S druecken 

echo.

echo _________________________________________________

echo.

echo.

echo.

echo      

echo ________ ________________________________________

echo.

ping localhost >nul 

cls

echo.

echo.

echo.

echo   ~GAMEOVER!~

ping localhost >nul

ping localhost >nul 

goto entscheidung

:entscheidung

echo willst du neu starten

choice /c:yn /m "y=ja n=nein:"

if %errorlevel%==1 goto start 

if %errorlevel%==2 exit 

danke für hilfreiche antworten :)

...zur Frage

Was möchtest Du wissen?