
Ich versuche, eine Batchdatei zu erstellen, die eine Variable anpingt, die durch die Benutzereingabe bestimmt wird
zB "PC-Namen eingeben:" pc name =123
Dann pingt es 123.domain.com
@echo off
set /p UserInputPath = Enter chosen PC:
ping %UserInputPath%
ping MyServerName
PAUSE
Ping MyServerName
funktioniert gut
Aber ping %UserInputPath%
das passiert nicht und es öffnet sich nur das "Hilfe"-Menü für Ping in CMD
Für jede Hilfe wäre ich dankbar ::::EDIT:::
ping %UserInputPath% -n 5
Gibt diesen Fehler zurück:IP address must be specified.
Können Sie keinen Ping an einen Hostnamen senden? (Das ist, was ich versuche)
BEARBEITEN 2::
Das ist mein Neustes:
@echo off
set /p UserInputPath = "Enter chosen PC: "
PAUSE
ping %UserInputPath%.store.domain.company.com
ping MyServerName
PAUSE
Antwort1
set /p UserInputPath = Enter chosen PC:
^ This space is included in the name of the variable
Sie erhalten am Ende eine Variable mit dem Namen%UserInputPath %
Bessere Nutzung
set /p "UserInputPath=Enter Chosen PC: "
ping "%UserInputPath%.store.domain.company.com"
Antwort2
Das folgende Skript funktioniert, zumindest bei mir unter Win7.
@echo off
set /p name="Enter name:"
ping %name%.google.com
Wir bitten den Benutzer zuerst, den Namen einzugeben, speichern ihn dann in der name
Variablen und übergeben ihn an ping
(siehe %name%
) Hinzufügen google.com
(nur als Beispiel!).
Antwort3
Hier ist ein schickes Bash-Skript für Sie. Habe es heute früher für die ursprüngliche Frage gehackt, bevor mir klar wurde, dass es für Windows war. Habe überlegt, es für Sie in eine Batchdatei zu konvertieren, aber das sah mühsam aus. Es hat mich daran erinnert, wie ich im College Startskripte geschrieben habe.
Sie müssen Powershell verwenden oder irgendwo einen *nix-Host starten. Powershell v3 ist wirklich gut. Sie könnten dies eigentlich ziemlich einfach in Powershell konvertieren.
Dafür wird es ein paar negative Stimmen geben, aber wen kümmert das schon. Jemand wird dieses Skript nützlich finden. Zumindest können Sie die Logik und den regulären Ausdruck ausnutzen.
Getestet unter Debian.
#!/bin/bash
# ------------------------------------------------------------------
# superuserping.sh # Can be changed :P
# /usr/bin/superuserping.sh # Put it wherever you like...
# ------------------------------------------------------------------
# Usage: ./superuserping.sh [fqdn|shortname|ip]
# If no argument is passed it will ask for one
# Author: Alex Atkinson
# Author Date: May 25, 2015
# ------------------------------------------------------------------
# VARIABLES
# ------------------------------------------------------------------
domain="domain.com"
rxshort='^[A-Za-z0-9]{1,63}$'
rxfqdn='^([A-Za-z0-9-]{1,63}\.)+[A-Za-z]{2,6}$'
rxip='^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'
# ------------------------------------------------------------------
# Check for argument. Get one if none found.
# ------------------------------------------------------------------
if [ -z $1 ]; then
echo -n "Enter the hostname or IP to ping and press [ENTER]: "
read host
else
host=$1
fi
# ------------------------------------------------------------------
# ARGUMENT VALIDATION
# ------------------------------------------------------------------
checkshort=$([[ $host =~ $rxshort ]])
checkshort=$?
checkfqdn=$([[ $host =~ $rxfqdn ]])
checkfqdn=$?
checkip=$([[ $host =~ $rxip ]])
checkip=$?
# ------------------------------------------------------------------
# FUNCTIONS
# ------------------------------------------------------------------
function check_userinput()
{
# Validate userinput against shortname, fqdn, and IP regex. If shortname then add domain.
if [[ $checkshort == '0' ]] || [[ $checkfqdn == "0" ]] || [[ $checkip == "0" ]] ; then
if [[ $checkip == 1 ]]; then
if [[ $host != *$domain ]]; then
host=$host.$domain
fi
fi
else
echo -e "\e[00;31mERROR\e[00m: ERROR:" $host "does not appear to be a valid shortname, fqdn, or IP."
exit 1
fi
}
function resolve_host()
{
# Check for DNS host resolution.
dnscheck=$(host $host)
if [[ $? -eq 0 ]]; then
echo -e "\n"$dnscheck "\n"
else
echo -e "\n\e[00;31mERROR\e[00m: DNS was unable to resolve the provided hostname or IP:" $host".\n"
echo -n "Press [ENTER] key to continue with ping, or [Q] to quit..."
read -n 1 -s key
if [[ $key = q ]] || [[ $key = Q ]]; then
echo -e "\nExiting...\n"
exit 1
fi
fi
}
# ------------------------------------------------------------------
# MAIN OPERATIONS
# ------------------------------------------------------------------
check_userinput
resolve_host
ping $host
Antwort4
Sieht aus, als ob Sie in dieFalle mit verzögerter Expansionund Ihr Code-Ausschnitt ist zwischen (
und eingeschlossen )
. Wenn Sie eine Variable innerhalb eines solchen Blocks ändern, müssen SieVerzögerte Erweiterung aktivieren...
@echo off
SETLOCAL enableextensions enabledelayedexpansion
set "UserInputPath=AnotherServer"
(
set "UserInputPath=MyServerName"
rem set /p "UserInputPath = Enter chosen PC: "
echo 1st percent-expansion %UserInputPath%
echo 1st delayedexpansion !UserInputPath!
)
echo(
echo 2nd percent-expansion %UserInputPath%
echo 2nd delayedexpansion !UserInputPath!
Ausgabe:
1st percent-expansion AnotherServer
1st delayedexpansion MyServerName
2nd percent-expansion MyServerName
2nd delayedexpansion MyServerName