Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batchscripts

Frage Entwicklung Batch & Shell

Mitglied: perseus21

perseus21 (Level 1) - Jetzt verbinden

18.03.2014 um 15:26 Uhr, 1742 Aufrufe, 6 Kommentare, 2 Danke

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
Mitglied: bastla
18.03.2014 um 16:35 Uhr
Hallo perseus21 und willkommen im Forum!

Ungetestet etwa so:
01.
@echo off & setlocal 
02.
set "Datei=D:\Deine Liste.txt" 
03.
 
04.
del "%Datei%" 2>nul 
05.
:Loop 
06.
set "Ein=" 
07.
set /p Ein=Bitte einen Rechnernamen eingeben oder nur ENTER für Ende der Eingabe:  
08.
if not defined Ein goto :EndeEingabe 
09.
setlocal enabledelayedexpansion 
10.
>>"%Datei%" echo !Ein! 
11.
endlocal 
12.
goto :Loop 
13.
 
14.
:EndeEingabe 
15.
cls 
16.
echo Eingegeben wurde: 
17.
type "%Datei%"
Grüße
bastla
Bitte warten ..
Mitglied: rubberman
18.03.2014, aktualisiert um 17:58 Uhr
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 ...
... 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
Bitte warten ..
Mitglied: perseus21
19.03.2014 um 10:06 Uhr
Guten morgen,
erstmal vielen Dank für die sehr schnellen Antworten.
Also, Hintergrund ist folgender:

Ich möchte über CMD mehrere Rechnernamen eingeben, diese sollen in eine Textdatei abgelegt werden.
Das Script soll jetzt einen Registrywert in die Registry der in der Liste stehenden PC´s schreiben.

So sieht momentan meine unvollständige bat aus: (Bitte nicht wundern, bin blutiger Anfänger was sripten/batchen betrifft)

@echo off & setlocal
CLS
set "datei=\\Servername\Pfad\liste.txt" ;von bastla übernommen
del %datei% 2>NUL ;von bastla übernommen
echo;
echo >>> Unterbinden von extrem langen Anmeldezeiten bei Erstanmeldung an einem Win XP Rechner <<<
echo;
set "Ein=" ;von bastla übernommen

echo Auf welchen Rechnern soll der Registry Wert gesetzt werden?

:pcs
set /p apc=Computername:
if not defined apc goto :ende_neg
setlocal enabledelayedexpansion ;von bastla übernommen
>>%datei% echo !apc! ;von bastla übernommen
endlocal ;von bastla übernommen
goto :pcs

:reg
echo j| reg add "\\%apc%\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v BufferPolicyReads /t REG_DWORD /d 1 >NUL
echo;
echo;
goto :ende_pos

:ende_neg
echo;
echo Es wurden keine Eingaben gemacht...
pause
exit

:ende_pos
echo Žnderungen wurden erfolgreich vollzogen...
pause
exit

Nachdem ich die Zeilen von bastla übernommen habe kann ich mehrere Eingaben machen. Nur funktioniert die Schleife nicht richtig. Wenn ich
nur ENTER drücke bleibt er in der Schleife und schreibt die letzte Eingabe in die Datei.

Klarer geworden?

Gruß
Dirk
Bitte warten ..
Mitglied: perseus21
19.03.2014 um 10:13 Uhr
Hallo Bastla,
erstmal guten morgen und vielen Dank für die schnelle Antwort.
Was bezwecken folgende Zeilen?
Habe meine *.bat mit deinen Angaben erweitert und im Kommentar von rubberman eingestellt.

Was bezwecken folgende Zeilen?:

1) set"Ein="
2) setlocal enabledelayexpansion
3) >>"%Datei%" echo !Ein!

Gruß
Dirk
(perseus21)
Bitte warten ..
Mitglied: bastla
19.03.2014 um 13:27 Uhr
Hallo perseus21!
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 "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"
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:
01.
echo off & setlocal 
02.
CLS 
03.
set "datei=\\Servername\Pfad\liste.txt" 
04.
del "%datei%" 2>NUL 
05.
echo; 
06.
echo >>> Unterbinden von extrem langen Anmeldezeiten bei Erstanmeldung an einem Win XP Rechner <<< 
07.
echo; 
08.
 
09.
echo Auf welchen Rechnern soll der Registry Wert gesetzt werden? 
10.
 
11.
:pcs 
12.
set "Ein=" ;von bastla übernommen 
13.
set /p apc=Computername: 
14.
if not defined apc goto :ende 
15.
echo j| reg add "\\%apc%\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v BufferPolicyReads /t REG_DWORD /d 1 >NUL || goto :pcs 
16.
setlocal enabledelayedexpansion 
17.
>>%datei% echo !apc! 
18.
endlocal 
19.
goto :pcs 
20.
 
21.
:ende 
22.
if exist "%Datei%" ( 
23.
    echo Žnderungen wurden erfolgreich vollzogen: 
24.
    type "%Datei%" 
25.
) else ( 
26.
    echo Keine Žnderungen vorgenommen! 
27.
28.
pause
Willst Du zunächst nur die Rechnernamen sammeln, müsstest Du die Zeile 15 in einer "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
Bitte warten ..
Mitglied: perseus21
31.03.2014 um 08:41 Uhr
Bastla & Rubberman,
vielen Dank für eure schnelle und kompetente Hilfe. Jetzt funktioniert es so, wie ich es möchte.

Gruß
Dirk
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Rechteveragbe über Batchscript
gelöst Frage von sanaitBatch & Shell7 Kommentare

Moin Moin, ich habe mir ein Laufwerk gemappt und will nun dort in einem Script die Rechte in den ...

Batch & Shell
Batchscript lässt sich nicht mit der Aufgaben Planung ausführen
gelöst Frage von MultiStormBatch & Shell18 Kommentare

Hallo ich fange erstmal mit den Rahmenbedingungen an Server: Windows Server 2012 R2 als HyperV VM 15 GB RAM ...

Batch & Shell
Batchscript führt im Task Planer die Aktionen nicht aus
gelöst Frage von Ch3p4cKBatch & Shell5 Kommentare

Hallo zusammen, nun setze ich mal meine Hoffnung in die Community. Ich habe gerade auf einem Windows Server 2008 ...

Neue Wissensbeiträge
Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 2 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 3 TagenWebbrowser7 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Sicherheit

Teamviewer Sessions können gekapert werden - Update tw. verfügbar

Information von sabines vor 3 TagenSicherheit6 Kommentare

In bestimmten Konstellationen können Teamviewer Sessions gekapert werden, wahrscheinlich aber ein recht unwahrscheinliches Szenario. Da der Teamviewer gerne für ...

Digitiales Fernsehen

Apple TV: Amazon Prime App ist verfügbar

Information von Frank vor 4 TagenDigitiales Fernsehen4 Kommentare

Die Amazon Prime Video App kann ab sofort auf einem Apple TV ab der 3 Generation installiert werden. Einfach ...

Heiß diskutierte Inhalte
Vmware
Installation Windows 10 VMware
Frage von Ghost108Vmware17 Kommentare

Hallo zusammen, versuche gerade mit Hilfe des vshpere clients eine virtuelle Windows 10 maschine aufzusetzen. 1. virtuelle Maschine erstellt ...

Exchange Server
SBS 2011 E-Mails können gesendet werden, aber nicht von extern empfangen
Frage von andreas1234Exchange Server14 Kommentare

Hallo Community, ich habe das Problem, dass seit knapp zwei Wochen die E-Mails von meinem SBS 2011 einwandfrei gesendet ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Windows Server
Server 2012 über Eingabeaufforderung devmgmt.msc geht nicht
gelöst Frage von achim222Windows Server9 Kommentare

Hallo, ich habe hier einen Server 2012 der im Reparaturmodus startet. Es liegt an einem falschen VirtIO Treiber für ...