2016-09-12 2 views
0

Я пытаюсь прочитать путь к файлу в пакетный файл Windows, переменнойпакетный файл для пути команды синтаксического анализа

set print_nodePath=reg query "hklm\software\node.js" /v InstallPath 
for /f "skip=2 tokens=3" %%a in ('%print_nodePath%') do set nodePath=%%a 
echo %nodePath% 

запрос рег правильно возвращает

HKEY_LOCAL_MACHINE\software\node.js 

InstallPath REG_SZ C:\Program Files\nodejs\ 

, но я не знаю, как напишите команду 'for', чтобы захватить путь к файлу, так как он содержит пробел (C: \ Program). Полагаю, мне нужно присоединиться к 3-му и 4-му токенам?

есть ли «хороший» способ написать это?

+0

Закройте его в двух экземплярах (_ "_):' for/f "skip = 2 tokens = 3" %% a in ('"% print_nodePath%"') '. – CristiFati

+0

@CristiFati, командная строка, обработанная 'for/F' выполняется правильно, проблема ограничивается только синтаксическим анализом ... – aschipfl

+0

Thx, похоже, что я не внимательно прочитал вопрос. Опять же, – CristiFati

ответ

1

Вам нужно всего лишь несколько изменений:

  • изменения tokens=3 к tokens=2*;
  • читать переменную %%b, а не %%a;

Вот фиксированный код:

set print_nodePath=reg query "hklm\software\node.js" /v InstallPath 
for /f "skip=2 tokens=2*" %%a in ('%print_nodePath%') do set "nodePath=%%b" 
echo(%nodePath% 

Это работает только если имя значения реестра не содержит белые-пространства на своем собственном.

+0

спасибо. Я не знал, как установить ' тоны. – hal9000

Смежные вопросы