#powershell #batch-file #one-liner
Вопрос:
Я использую однострочные строки PowerShell в нескольких пакетных сценариях, но, похоже, не удается правильно избежать следующего:
если ЯЗЫК не определен ( для /f "usebackq" %%v в (`PowerShell.exe -NoProfile -Обход политики выполнения-Команда "(Get-ItemPropertyValue -Путь "HKCU:Панель управленияМеждународный" -Имя "Локальное имя").Раскол('-')[0]"`) установите ЯЗЫК=%%v )
Я проверил, что именно эта строка не работает в моем пакетном файле. Идея кода состоит в том, чтобы прочитать значение из реестра и назначить первую часть перед дефисом переменной среды. Поэтому, если значение реестра «de-DE», ЯЗЫК должен иметь значение «de».
Ответ №1:
Я не могу воспроизвести проблему с предоставленным вами кодом.
Однако я бы посоветовал вам рассмотреть другие подходы — сравните эти примеры и отметьте, какой из них выполняется быстрее всего
@Echo off
Setlocal
For /f "delims=" %%v in ('where /r "%Windir%SysWOW64WindowsPowerShell" powershell.exe')Do Set "powershell=%%v -nologo -noprofile"
Echo(%TIME%
For /f "usebackq" %%v in (`PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "(Get-ItemPropertyValue -Path 'HKCU:Control PanelInternational' -Name 'LocaleName').Split('-')[0]"`) do set "LANGUAGE=%%v"
Set LANG
Echo(%TIME%
For /f "usebackq tokens=1 Delims=-" %%G in (`
%powershell% -c "Get-ItemPropertyValue -Path 'HKCU:Control PanelInternational' -Name 'LocaleName'"
`)Do Set "LANGUAGE=%%G"
Set LANG
Echo(%TIME%
For /f "Skip=1 tokens=3 Delims=- " %%G in ('reg query "HKEY_CURRENT_USERControl PanelInternational" /v localename')Do Set "LANGUAGE=%%G"
Set LANG
Echo(%TIME%
Endlocal
Goto:Eof