Batchscripts
Hallo,
ich suche nach einer Lösung um mit CMD folgendes Problem zu lösen:
Ich möchte, daß der Benutzer mittels einer set /p Eingabe mehrere Eingaben (Rechnernamen) macht, diese dann in eine
Datei geschrieben werden und dann vom System aus der Datei benutzt werden können.
Bsp: Ein Benutzer gibt mehrere Computernamen an, die dann das System anpingen kann.
Gruß
Dirk
ich suche nach einer Lösung um mit CMD folgendes Problem zu lösen:
Ich möchte, daß der Benutzer mittels einer set /p Eingabe mehrere Eingaben (Rechnernamen) macht, diese dann in eine
Datei geschrieben werden und dann vom System aus der Datei benutzt werden können.
Bsp: Ein Benutzer gibt mehrere Computernamen an, die dann das System anpingen kann.
Gruß
Dirk
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 232939
Url: https://administrator.de/forum/batchscripts-232939.html
Ausgedruckt am: 16.02.2025 um 20:02 Uhr
6 Kommentare
Neuester Kommentar
Hallo perseus21 und willkommen im Forum!
Ungetestet etwa so:
Grüße
bastla
Ungetestet etwa so:
@echo off & setlocal
set "Datei=D:\Deine Liste.txt"
del "%Datei%" 2>nul
:Loop
set "Ein="
set /p Ein=Bitte einen Rechnernamen eingeben oder nur ENTER für Ende der Eingabe:
if not defined Ein goto :EndeEingabe
setlocal enabledelayedexpansion
>>"%Datei%" echo !Ein!
endlocal
goto :Loop
:EndeEingabe
cls
echo Eingegeben wurde:
type "%Datei%"
bastla
Hallo perseus21,
auch von mir ein Willkommen.
bastla hat ja bereits eine gute Vorlage gegeben, wie man Benutzereingaben in eine Datei schreiben kann. Aber was man unter ...
Redest du vom Betriebssystem? Und wie willst du dem "System" beibringen, irgendeine x-beliebige Datei zu "benutzen" oder deren Inhalte anzupingen? Da fehlt mir noch ein bisschen Info und vor allem was am Ende dabei als Output herauskommen soll. (Oder hast du da schon konkrete Ansätze und benötigst für diesen Teil deines Problemchens keinen Support?)
Grüße
rubberman
auch von mir ein Willkommen.
bastla hat ja bereits eine gute Vorlage gegeben, wie man Benutzereingaben in eine Datei schreiben kann. Aber was man unter ...
... und dann vom System aus der Datei benutzt werden können ...
... verstehen soll, erschließt sich mir nicht.Redest du vom Betriebssystem? Und wie willst du dem "System" beibringen, irgendeine x-beliebige Datei zu "benutzen" oder deren Inhalte anzupingen? Da fehlt mir noch ein bisschen Info und vor allem was am Ende dabei als Output herauskommen soll. (Oder hast du da schon konkrete Ansätze und benötigst für diesen Teil deines Problemchens keinen Support?)
Grüße
rubberman
Hallo perseus21!
Die "
Dass die Ausgabe-Umleitung schon vor dem "
Die Alternative, zwischen "2" und ">>" ein Leerzeichen zu setzen, würde zwar diesen Effekt vermeiden, dafür aber das Leerzeichen mit in die Datei schreiben.
Jetzt zu Deinem Code: Wenn Du anscheinend sofort nach der Eingabe das Schreiben in die Registry veranlassen möchtest (mit dem Risiko, dass etwa der Zielrechner nicht eingeschaltet wäre), brauchst Du eigentlich die Datei gar nicht (oder allenfalls als Log, welche Rechner bearbeitet wurden) - in diesem Fall sollte das (ungetestet) etwa so gehen:
Willst Du zunächst nur die Rechnernamen sammeln, müsstest Du die Zeile 15 in einer "
Grüße
bastla
set"Ein="
Damit wird der Inhalt der Variablen Ein gelöscht, sodass bei Eingabe von nur Enter die Variable tatsächlich leer ist (und nicht den vorherigen Wert behält).setlocal enabledelayexpansion
>>"%Datei%" echo !Ein!
Dazu gehört auch noch das ">>"%Datei%" echo !Ein!
endlocal
"; durch die Verwendung der "delayedExpansion
" werden auch Sonderzeichen wie "&" oder "|", die ansonsten in Batch eine besondere Bedeutung haben, als "gewöhnlicher" Text behandelt und unverändert in die Datei geschrieben, ohne ev Fehler zu verursachen.Die "
echo
"-Zeile sorgt für das Schreiben der Eingabe in die Datei (mit ">>
" wird die neue Zeile angefügt, bei nur einem Umleitungszeichen würde die Datei immer überschrieben und daher am Ende nur den letzten eingegebenen Wert enthalten. Wegen der genannten "delayedExpansion
" muss anstelle des üblichen Prozentzeichens (also "%Ein%") der Variablenname mit "!" begrenzt werden.Dass die Ausgabe-Umleitung schon vor dem "
echo
" steht, beugt einem ev Problem der folgenden Art vor: Wenn %Ein% (bzw !Ein!) etwa den Inhalt "Rechner 2" hätte, würde ein nachgestelltes ">>"%Datei%"
" als Ziel für die Ausgabe der Fehlermeldung auf "Kanal 2" (also "2>>
") interpretiert und daher nix in die Datei schreiben - kannst Du einfach testen, indem Du direkt in CMD eingibst:echo Rechner 2>>"Test.txt"
Jetzt zu Deinem Code: Wenn Du anscheinend sofort nach der Eingabe das Schreiben in die Registry veranlassen möchtest (mit dem Risiko, dass etwa der Zielrechner nicht eingeschaltet wäre), brauchst Du eigentlich die Datei gar nicht (oder allenfalls als Log, welche Rechner bearbeitet wurden) - in diesem Fall sollte das (ungetestet) etwa so gehen:
echo off & setlocal
CLS
set "datei=\\Servername\Pfad\liste.txt"
del "%datei%" 2>NUL
echo;
echo >>> Unterbinden von extrem langen Anmeldezeiten bei Erstanmeldung an einem Win XP Rechner <<<
echo;
echo Auf welchen Rechnern soll der Registry Wert gesetzt werden?
:pcs
set "Ein=" ;von bastla übernommen
set /p apc=Computername:
if not defined apc goto :ende
echo j| reg add "\\%apc%\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v BufferPolicyReads /t REG_DWORD /d 1 >NUL || goto :pcs
setlocal enabledelayedexpansion
>>%datei% echo !apc!
endlocal
goto :pcs
:ende
if exist "%Datei%" (
echo Žnderungen wurden erfolgreich vollzogen:
type "%Datei%"
) else (
echo Keine Žnderungen vorgenommen!
)
pause
for /f
"-Schleife, welche die erstellte Datei ausliest, platzieren; diese Schleife könnte entweder unmittelbar nach ":ende" oder in einem zweiten Batch stehen.Grüße
bastla