Як знайти ім'я ПК у пакетному сценарії?


18

Як я можу знайти ім'я ПК, на якому працює моя пакетна програма?

Я хотів би знайти ім'я ПК, на якому працює моя пакетна програма, і мати змогу зберігати його як змінну. Будь-яка допомога?


4
ви можете отримати ім'я хоста системи з командного рядка cmd або powershell hostname. вам не потрібно зберігати його як вар, просто викликайте його в рядку, як вам потрібно.
Френк Томас

@FrankThomas - Чому ви не надасте натомість відповідь (можливо, короткий приклад)?
Ніфле

2
hostnameє exe, і поки він видає ім'я машини на консолі, захопити його у пакетному файлі буде нетривіально. На щастя, вже існує набір змінних оточуючого середовища, який доступний ( 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?
eis

Я подумав про це після того, як написав відповідь. Це, звичайно, було б простіше. Я не є експертом з цих питань, але грунтуючись на serverfault.com/q/260563/201695 , я думаю, що ім'я хоста та ім’я комп’ютера не гарантовано однакові. Але я думаю, що вони повинні бути однаковими за звичайних обставин.
dbenham

26

У Windows, як правило, змінна середовища вже встановлена ​​і доступна для використання -

echo %ComputerName%

1
До яких версій Windows це стосується? (Працював для мене в Windows 7.)
Девід Річербі

1
Ця змінна присутня принаймні весь шлях назад до Windows NT.
Я кажу, відновіть Моніку

що цікаво, проте, вона не працюватиме в оболонці; лише в cmd.exe. дивно, що.
Френк Томас

У Powershell є свій спосіб представлення спеціальних речей, таких як Змінні середовища ... наступні роботи -Get-Item Env:\ComputerName
Вікас Гупта

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

0

У PowerShell ви також можете використовувати:

[Environment]::MachineName

Тут значення походить від .Net, щоб уникнути проблеми використання $Env:ComputerName.


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