
Я пытаюсь создать пакетный файл, который будет пинговать переменную, определяемую вводом пользователя.
например "Введите имя ПК:" имя ПК =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