Batch set variable echo Ausgabe bleibt leer
Hallo .
ich möchte gern die eingabe einer set /p Abfrage im Anschluss, zur bestätigung per echo ausgeben.
Beispiel:
Hier tippe ich nun z.B. User1|User5 ein
Hier tippe ich nun z.B. a ein
Dann kommt :
Als Ausgabe kommt nun allerdings
Das Passwort für wird auf zurückgesetzt
Ich habe diese Abfrage aus einem anderen, bereits bestehenden Script raucskopiert. Da klappt das problemlos. Ich kann mir aber nicht erklären, warum das bei meinem neuen Scipt nicht funktioniert und nur ein leerer Platzhalter angezeigt wird.
ich möchte gern die eingabe einer set /p Abfrage im Anschluss, zur bestätigung per echo ausgeben.
Beispiel:
set /p user="Fuer welche user möchten sie das passwort zurücksetzten (bsp. User1|User2|User9): "
set /p pwd="Wie soll das neue Passwort für diese User lauten?: "
Dann kommt :
echo Das Passwort für User %user% wird auf %pwd% zurückgesetzt
Als Ausgabe kommt nun allerdings
Das Passwort für wird auf zurückgesetzt
Ich habe diese Abfrage aus einem anderen, bereits bestehenden Script raucskopiert. Da klappt das problemlos. Ich kann mir aber nicht erklären, warum das bei meinem neuen Scipt nicht funktioniert und nur ein leerer Platzhalter angezeigt wird.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1524223538
Url: https://administrator.de/contentid/1524223538
Ausgedruckt am: 25.11.2024 um 06:11 Uhr
18 Kommentare
Neuester Kommentar
Wo stehen die Befehle im Kontext deines Skripts genau?
Stehen sie innerhalb von Klammern ? Wenn ja dann musst du delayed Expansion oder
https://ss64.com/nt/delayedexpansion.html
Bsp. wenn das ganze oben innerhalb von Klammern (z.B. in nem For-Loop oder nem geklammerten IF) steht
Stehen sie innerhalb von Klammern ? Wenn ja dann musst du delayed Expansion oder
call set
benutzen. Und die Variablen in Ausrufezeichen setzen denn sonst existieren die Variablen innerhalb des Klammer-Konstrukts nichthttps://ss64.com/nt/delayedexpansion.html
Bsp. wenn das ganze oben innerhalb von Klammern (z.B. in nem For-Loop oder nem geklammerten IF) steht
@echo off &setlocal enabledelayedexpansion
chcp 1252 >nul
(
set /p "user=Fuer welche user möchten sie das passwort zurücksetzten (bsp. User1|User2|User9): "
set /p "pwd=Wie soll das neue Passwort für diese User lauten?: "
echo Das Passwort für User !user! wird auf !pwd! zurückgesetzt
)
Zitat von @NordicMike:
Dann müsste jedoch die %pwd% Variable funktionieren. Ich vermute er hat das letzte Echo mit %user% und %pwd% noch in den Anführungszeichen drinnen.
Dann müsste jedoch die %pwd% Variable funktionieren. Ich vermute er hat das letzte Echo mit %user% und %pwd% noch in den Anführungszeichen drinnen.
also wenn ich das "stumpf" in eine
batch.cmd
kopiere:set /p user="Fuer welche user möchten sie das passwort zurücksetzten (bsp. User1|User2|User9): "
set /p pwd="Wie soll das neue Passwort für diese User lauten?: "
echo Das Passwort für User %user% wird auf %pwd% zurückgesetzt
Fuer welche user möchten sie das passwort zurücksetzten (bsp. User1|User2|User9): User1|User5
Wie soll das neue Passwort für diese User lauten?: a
Der Befehl "User5" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
C:\tmp>
Edit: Typo
Hab auch mal das enabledelayedexpansion und die Anführungszeichen hinzugefügt. aber das bringt auch nix
Lies meinen Kommentar und mein Codebeispiel oben noch mal ganz genau! Du musst die Variablen dann in Ausrufezeichen setzen wenn du delayed expansion innerhalb des Klammmerkonstrukts nutzen willst!
Moin,
Oder man nimmt gleich die Skriptsprache, die für sowas heute vorgesehen ist. Dann muss man nicht mehr an den alten Krücken gehen, sondern schreibt einfach eine Zeile:
my 2 cents
Erik
Zitat von @149569:
Hab auch mal das enabledelayedexpansion und die Anführungszeichen hinzugefügt. aber das bringt auch nix
Lies meinen Kommentar und mein Codebeispiel oben noch mal ganz genau! Du musst die Variablen dann in Ausrufezeichen setzen wenn du delayed expansion innerhalb des Klammmerkonstrukts nutzen willst!Oder man nimmt gleich die Skriptsprache, die für sowas heute vorgesehen ist. Dann muss man nicht mehr an den alten Krücken gehen, sondern schreibt einfach eine Zeile:
Set-ADAccountPassword -Identity (Read-Host -prompt "Username?") -Reset -NewPassword (Convertto-SecureString -AsPlainText (read-host -AsSecureString -prompt "Password") -force)
my 2 cents
Erik
Full ackn.
Wenn es sich dabei tstsächlich um AD Accounts handelt. Aber auch für evt. reine SQL-User gibt's da ja was von Ratiopharm...
https://docs.microsoft.com/en-us/powershell/module/sqlserver/set-sqlcred ...
Aber manch einer der Batchies lernt es halt nicht mehr ...
Wenn es sich dabei tstsächlich um AD Accounts handelt. Aber auch für evt. reine SQL-User gibt's da ja was von Ratiopharm...
https://docs.microsoft.com/en-us/powershell/module/sqlserver/set-sqlcred ...
Aber manch einer der Batchies lernt es halt nicht mehr ...
Zitat von @149569:
Full ackn.
Wenn es sich dabei tstsächlich um AD Accounts handelt.
Full ackn.
Wenn es sich dabei tstsächlich um AD Accounts handelt.
Klar, aber auch für andere Accounts kann man das meist in einer Zeile erledigen.
Aber auch für evt. reine SQL-User gibt's da ja was von Ratiopharm...
Eben.
Aber manch einer der Batchies lernt es halt nicht mehr ...
*g*
Zitat von @MarciMarc85:
Du meinst also so:
anstatt so:
Das Ergebins ist, dass weiterhin nichts angezeigt wird
Zitat von @149569:
Hab auch mal das enabledelayedexpansion und die Anführungszeichen hinzugefügt. aber das bringt auch nix
Lies meinen Kommentar und mein Codebeispiel oben noch mal ganz genau! Du musst die Variablen dann in Ausrufezeichen setzen wenn du delayed expansion innerhalb des Klammmerkonstrukts nutzen willst!Du meinst also so:
set /p "_user_passwords=Enter new password for users:"
set /p _user_passwords="Enter new password for users:"
Das Ergebins ist, dass weiterhin nichts angezeigt wird
Nein meine ich nicht! Lies doch bitte mal den Code genau .... bei der Ausgabe und Nutzung der Variablen musst du Ausrufezeichen (!) statt Prozentzeichen(%) verwenden!
echo !_user_passwords!
Steht doch genau so auch im Link zu delayed expansion ... aber Lesen wird ja heutzutage überbewertet ... 🐟.
No comment.
So läuft das hier problemlos durch
mit ! beendet sich das Sript aber sofort, wenn ich die Abfrage nach Änderung von Username und Passwort mit y bestätige
Das hat damit nichts zu tun da stimmen eben sonst noch so einige Dinge nicht ...So läuft das hier problemlos durch
@echo off
::::: IP-Adesse bestimmen :::::
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set "ip=%%b"
set "_ip_address=%ip:~1%"
::::: Hostname bestimmen :::::
for /f "usebackq" %%i IN (`hostname`) DO SET "_dns_name=%%i"
::::: Scripnamen bestimmen :::::
set "_scriptname=%~nx0"
::::: Action Parameter bestimmen :::::
set /p "_recovery_file=Which full MySQL dump (.sql) OR MySQL dump zip archive (.sql.zip) you want to recover (e.g. d:\temp\lm\full_20130214-1011.sql): "
set /p "_sql_root_pw=Enter MYSQL root password: "
set /p "_answer=Should i do a backup of the current database? (y/n) "
if /i [%_answer%]==[y] (
set "database_backup=true"
set "_backup=database backup=yes"
) else (
set "_backup=database backup=no"
)
set "/p _answer=Should i cleanup downloads, workspaces and session data? (y/n)"
if /i [%_answer%]==[y] (
set "_cleanup_session=true"
set "_clear_statistics=clear statistics=yes"
) else (
set "_clear_statistics=clear statistics=no"
)
set /p _answer="Should i change the passwords and emails of some users? (y/n) "
if /i [%_answer%]==[y] (
set /p "_sql_user_filter=Enter SQL REGEXP filter for username which should be _not_ changed (e.g. root|rss):"
set /p "_user_passwords=Enter new password for users:"
setlocal ENABLEDELAYEDEXPANSION
set "_useraccdata=reset e-mail=yes, reset user password=yes, users not to reset="!_sql_user_filter!", new password="!_user_passwords!""
) else (
set "_useraccdata=reset e-mail=no, reset user password=no"
)
echo %_ip_address%, %_dns_name%, %_scriptname%, %_backup%, recovery file=%_recovery_file%, %_clear_statistics%, %_useraccdata%
pause
Zitat von @MarciMarc85:
es muss aber zwingend batch sein und nicht Powershell, da das ja nur ein kleiner Teil, eines großen Scripts ist, was so, wie es jetzt ist, jahrelang fehlerfrei funktioniert. warum sollte ich dass jetzt komplett auf Powershell umstellen?
es muss aber zwingend batch sein und nicht Powershell, da das ja nur ein kleiner Teil, eines großen Scripts ist, was so, wie es jetzt ist, jahrelang fehlerfrei funktioniert. warum sollte ich dass jetzt komplett auf Powershell umstellen?
Mein Windows98 läuft auch schon seit zwanzig Jahren fehlerfrei. Warum sollte ich das jetzt komplett umstellen?
Deine Ausgangsfrage beantwortet diese Frage: Weil die PS mehr Möglichkeiten bietet, dabei sogar einfacher ist und vor allem Umstellungen und Erweiterungen sehr viel eleganter zu erledigen sind als mit der uralten Batch-Krücke.
Zitat von @MarciMarc85:
Allerdings wird nun in der echo_Ausgabe die Variable mit den umschließenden " angezeigt. Schöner wäre es gewesen ohne, aber das ist offensichtlich in diesem Fall nicht möglich.
Das kannst du leicht ändern indem du sie entfernst ... Dachte nur die wären bei deiner Ausgabe pflicht gewesen, nötig für die Funktionsweise sind sie hier nicht.Allerdings wird nun in der echo_Ausgabe die Variable mit den umschließenden " angezeigt. Schöner wäre es gewesen ohne, aber das ist offensichtlich in diesem Fall nicht möglich.