Как найти имя ПК в пакетном скрипте?


18

Как мне найти имя ПК, на котором запущена моя пакетная программа?

Я хотел бы найти имя ПК, на котором запущена моя пакетная программа, и сохранить его как переменную. Любая помощь?


4
Вы можете получить имя хоста системы из командной строки cmd или powershell с помощью hostname. вам не нужно хранить его как переменную, просто вызывайте его по мере необходимости.
Фрэнк Томас

@FrankThomas - Почему бы вам не предоставить вместо этого ответ (возможно, с коротким примером)?
Nifle

2
hostnameэто исполняемый файл, и хотя он выводит имя машины на консоль, записать его в командный файл будет нетривиально. К счастью, переменная окружения уже установлена ​​и доступна ( ComputerName) для использования в типичной системе Windows.
Викас Гупта

Ответы:


10

Как ответил Викас Гупта, вы можете использовать предопределенную %COMPUTERNAME%переменную среды, которая уже содержит имя компьютера. С практической точки зрения, это должно быть все, что вам нужно.

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

Вы можете использовать WMIC для непосредственного чтения имени компьютера.

for /f "skip=1 delims=" %%A in (
  'wmic computersystem get name'
) do for /f "delims=" %%B in ("%%A") do set "compName=%%A"

Дополнительный цикл FOR устраняет нежелательные символы возврата каретки, которые являются артефактом FOR / F, взаимодействующим с выводом Unicode WMIC. Только в одной петле имеется возврат каретки в конце каждой строки, что может вызвать проблемы.


1
есть ли причина использовать wmic вместо просто вызова hostname?
эйс

Я подумал об этом после того, как написал ответ. Это конечно было бы проще. Я не эксперт по этим вопросам, но, основываясь на serverfault.com/q/260563/201695 , я думаю, что имя хоста и имя компьютера не обязательно совпадают. Но я думаю, что они должны быть одинаковыми при нормальных обстоятельствах.
Дбенхем

26

В Windows обычно переменная окружения уже установлена ​​и доступна для использования -

echo %ComputerName%

1
К каким версиям Windows это относится? (Работал для меня в Windows 7.)
Дэвид Ричерби

1
Эта переменная присутствует, по крайней мере, до Windows NT.
Я говорю Восстановить Монику

Интересно, что это не будет работать в PowerShell; только в cmd.exe. странно это.
Фрэнк Томас

Powershell имеет свой собственный способ представления особых вещей, таких как переменные среды ... следующие работы -Get-Item Env:\ComputerName
Викас Гупта

1
@VikasGupta Вы можете просто использовать $env:computername(без учета регистра).
Боб

0

В PowerShell вы также можете использовать:

[Environment]::MachineName

Здесь значение взято из .Net, поэтому он избегает проблемы использования $Env:ComputerName.


В чем проблема использования $Env:ComputerName?
Shadow
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.