В настоящее время у меня есть настройка, при которой программа хочет, чтобы мой IP-адрес локальной сети привязывал свои данные, и этот IP-адрес локальной сети всегда был случайным при перезагрузке системы. Мой IP-адрес локальной сети всегда отличается, так как я использую VPN, так что это своего рода морда каждый раз, когда я либо меняю сеть, либо перезагружаюсь, так как мне нужно запустить программу, изменить ее, перезапустить.
У меня естьскрипт, который создаст переменную с правильным IP-адресом, так как это всегда первый IPv4-адрес. Я нашел его на этом сайте.
set ip_address_string="IPv4 Address"
rem Uncomment the following line when using older versions of Windows without IPv6 support (by removing "rem")
rem set ip_address_string="IP Address"
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do (
echo Your IP Address is: %%f
goto :eof
)
Это прекрасно, но каждый найденный мной пост редактирования .ini на самом деле не работает для меня, так как печатает строку бесконечно, а не редактирует ее.
Поскольку размер .ini неизвестен, мне нужен скрипт powershell, чтобы он работал, так как BATCH имеет ограничения.
Один пользователь в Stackoverflow имел этот код:
(Get-Content C:\ProgramData\Nuance\NaturallySpeaking12\nssystem.ini) | ForEach-Object { $_ -replace 'Default NAS Address=.*','Default NAS Address=BHPAPPDGN01V' } | Set-Content C:\ProgramData\Nuance\NaturallySpeaking12\nssystem.ini
Строка, которую нужно изменить, в основном случайная. Ну, не случайно, но иногда он будет двигаться, так как пользователи могут вносить некоторые изменения, и он будет толкать IP-линию вниз или вверх в зависимости от настроек.
Я немного новичок, когда дело доходит до BATCHи powershell, и я не нашел способ передать информацию в powershell. Например, BATCH захватит IP-адрес, создаст переменную, запустит скрипт powershell, редактирующий .ini. Я помню, что имел код, который захватил IP в буфер обмена, но я не могу найти его в данный момент.
Мой текущий прогресс
@echo off
setlocal EnableExtensions
echo Exiting PROGRAM...
taskkill /IM PROGRAM.exe
timeout /t 1 /nobreak>nul
:check
for /F %%a in ('tasklist /NH /FI "IMAGENAME eq PROGRAM.exe"') do if %%a == PROGRAM.exe goto waiting
echo Restarting PROGRAM...
start "" "%ProgramFiles%\PROGRAM\PROGRAM.exe"
timeout /t 1 /nobreak>nul
exit
:waiting
echo PROGRAM is still running. Retrying...
timeout /t 3 /nobreak>nul
goto check
Мне не нужно setlocal EnableExtensions
, но ядействительно пытался заставить это работать, и это было необходимо тогда. В настоящее время скрипт проверяет, запущена ли программа, если она есть, мягко убейте ее (дождитесь ее завершения) и перезапустите. Моя цель - мягко убить его, отредактировать .ini, а затем перезапустить его с внесенными изменениями.