@AlexChubukov

Почему cmd преобразовывает string в bool?

Хочу написать bat файл, который в json файле находит логин, пароль и домен пользователя, а затем записывает их в локальные переменные и запускает программу с определенными правами. Формат в котором заданы логин и пароль самый простой
"Login": "login",
"Password": "password"
Написал следующий скрипт. Логин определяет корректно, однако при определении пароля и домена, после выполнения цикла for им присваиваются булевые значения.
Последовательно выводятся следующие строки
set password="password",
set password=false,
Запятая здесь сохраняется из json файла. С чем это может быть связано? Впервые появилась потребность написать что-то в cmd, так что не судите строго за код. Знаю, есть готовые решения по парсингу json файлов из cmd и powershell, но не хочу вводить дополнительные зависимости, так как запускать буду не на своем компьютере.
echo on
:: Search for login
set login 
FOR /F "tokens=2 delims= " %%i IN ('findstr Login configuration.json') DO ( set login=%%i )
set login=%login:~1,-3%
echo %login%
:: Search for password
set password
FOR /F "tokens=2 delims= " %%j IN ('findstr Password configuration.json') DO ( set password=%%j )
set password=%password:~1,-3%
echo %password%
:: Search for Domain
set domain
FOR /F "tokens=2 delims= " %%k IN ('findstr Domain configuration.json') DO ( set domain=%%k )
set domain=%domain:~1,-3%
echo %domain%


if not defined login (
	if not defined password (
		%~dp0application.exe
	) else (
		echo %password% | runas /user:%domain%\%login% %~dp0application.exe
	)
) else (
		echo %password% | runas /user:%domain%\%login% %~dp0application.exe
	) 

pause
  • Вопрос задан
  • 135 просмотров
Пригласить эксперта
Ответы на вопрос 2
AlexChubukov если не jqто повершел convertfrom-json

https://smearg.wordpress.com/2014/07/02/работа-с-j...

$a = @'
{
  "Login": "Alex" ,
  "Password": "qwerty" ,
  "Domain": "Alex" ,
  "Output_json": "json_files" ,
  "Output_log": "logs"
}
'@

$a | convertfrom-json 

Login       : Alex
Password    : qwerty
Domain      : Alex
Output_json : json_files
Output_log  : logs

только бы не cmd
Ответ написан
wisgest
@wisgest
Слесарь холодной обработки металла
1) Проще всего не на CMD, а на WSH/JS (стандартное средство Windows) воспользоваться eval для разбора JSON.
2) Вот это работать не должно:
echo %password% | runas
(см. Ввод пароля для RUNAS).

Итого (у меня работает):
0</* :
 @echo off
 set COMMAND="%~dp0application.exe"
 CScript //e:JScript //nologo //t:0 //i "%~f0" <configuration.json
 exit /b
*/0;
var conf = eval("(" + WScript.StdIn.ReadAll() + ")");
var WshShell = new ActiveXObject("WScript.Shell");
var Cmd = WshShell.Exec("cmd /q echo off");
var CmdIn = Cmd.StdIn;
var WinTitle = "rnd" + Math.random();
CmdIn.WriteLine("title " + WinTitle);
while (!WshShell.AppActivate(WinTitle)) WScript.Sleep(1);
WshShell.SendKeys("*~");
CmdIn.WriteLine("doskey /exename=runas.exe *=" + conf.Password);
CmdIn.WriteLine("start /b runas /user:"
 + conf.Domain + "\\" + conf.Login
 + " %COMMAND%>con 2>&1 <con"); // RUNAS <CON -- важно!
CmdIn.WriteLine("exit");
Cmd.Stdout.ReadAll();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы