Пинг с использованием переменной

Пинг с использованием переменной

Я пытаюсь создать пакетный файл, который будет пинговать переменную, определяемую вводом пользователя.

например "Введите имя ПК:" имя ПК =123

Затем он пингует 123.domain.com

@echo off
set /p UserInputPath = Enter chosen PC: 

ping %UserInputPath%

ping MyServerName

PAUSE

Ping MyServerNameработает отлично

Но ping %UserInputPath%этого не происходит, а просто открывается меню «Справка» для Ping в CMD

Любая помощь будет оценена по достоинству ::::EDIT:::

ping %UserInputPath% -n 5

Возвращает эту ошибку:IP address must be specified.

Вы не можете пинговать имя хоста? (Именно это я и пытаюсь сделать)

ПРАВКА 2::

Это мое последнее:

@echo off
set /p UserInputPath = "Enter chosen PC: " 
PAUSE 

ping %UserInputPath%.store.domain.company.com

ping MyServerName

PAUSE

решение1

set /p UserInputPath = Enter chosen PC: 
                    ^ This space is included in the name of the variable

Итак, вы заканчиваете с переменной с именем%UserInputPath %

Лучшее использование

set /p "UserInputPath=Enter Chosen PC: "
ping "%UserInputPath%.store.domain.company.com"

решение2

Следующий скрипт работает, по крайней мере у меня на Win7.

@echo off
set /p name="Enter name:"
ping %name%.google.com

Сначала мы просим пользователя ввести имя, затем сохраняем его в nameпеременной и передаем ее ping(см. %name%) для добавления google.com(просто в качестве примера!).

решение3

Вот вам прикольный скрипт bash. Взломал его сегодня утром для оригинального вопроса, прежде чем понял, что он для Windows. Думал преобразовать его в пакетный файл для вас, но это показалось мне болезненным. Напомнило мне о написании скриптов запуска в колледже.

Вам нужно использовать Powershell или где-то развернуть *nix-хост. Powershell v3 действительно хорош. Вы могли бы довольно легко преобразовать его в powershell.

Будет несколько отрицательных голосов, но кого это волнует. Кто-то найдет этот скрипт полезным. По крайней мере, вы можете разграбить логику и регулярные выражения.

Протестировано в 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

решение4

Похоже, ты действительно упал вловушка замедленного расширенияи ваш фрагмент кода заключен между (и ). Когда вы используете переменную, измененную внутри такого блока, то вам нужновключить отложенное расширение...

@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!

Выход:

1st percent-expansion AnotherServer
1st delayedexpansion  MyServerName

2nd percent-expansion MyServerName
2nd delayedexpansion  MyServerName

Связанный контент