Pingen mithilfe einer Variablen

Pingen mithilfe einer Variablen

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 MyServerNamefunktioniert 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 nameVariablen 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

verwandte Informationen