Как использовать переменные «set» для консоли Windows в сценариях NPM?

Пример, используя Guava:

File to = new File("C:/test/test.csv");

for (int i = 0; i < 42; i++) {
    CharSequence from = "some string" + i + "\n";
    Files.append(from, to, Charsets.UTF_8);
}
0
задан Sergey 19 March 2019 в 09:22
поделиться

2 ответа

Ваш пример set A="qwerty" && echo %A% неверен. Переменные в приглашении cmd / пакетном файле расширяются один раз для каждой строки / команды:

==> set "A="

==> echo %A%
%A%

==> set A="qwerty" && echo %A%
%A%

==> echo %A%
"qwerty"

Почему это происходит?

The [117 ] команда была впервые введена в MS-DOS 2.0 в марте 1983 года, в то время память и процессор были очень ограничены, и было достаточно расширения переменных один раз на строку .

Обходной путь с использованием команды CALL :

==> set "A="

==> echo %A%
%A%

==> set A="qwerty" && CALL echo %A%
"qwerty"

Редактировать:

Для полноты картины следующий пакетный скрипт показывает механизм расширения в процентах и ​​его комбинация с командой CALL подробно (примечание удвоило % знаков процента в пакетном файле CALL Echo %%_var%%):

@ECHO OFF
SETLOCAL
if NOT "%~1"=="" ECHO ON
echo        1st:
Set "_var=first"
Set "_var=second" & Echo %_var% & CALL Echo %%_var%%  
echo        2nd: 
Set "_var=first"
Set "_var=second" & CALL Echo %%_var%% & Echo %_var%  

[1126 ] Выход, echo OFF:

==> D:\bat\SO\55237418.bat
       1st:
first
second
       2nd:
second
first

Выход, echo ON:

==> D:\bat\SO\55237418.bat on

==> echo        1st:
       1st:

==> Set "_var=first"

==> Set "_var=second"   & Echo first   & CALL Echo %_var%
first
second

==> echo        2nd:
       2nd:

==> Set "_var=first"

==> Set "_var=second"   & CALL Echo %_var%   & Echo first
second
first
0
ответ дан JosefZ 19 March 2019 в 09:22
поделиться

До сих пор я обнаружил, что эти команды для правильной работы должны быть в разных сценариях и выполняться в определенном порядке. Итак, вот как это работает:

"scripts": {
  "aaa": "set TMP=test && npm run bbb",
  "bbb": "echo %TMP%"
}

npm run aaa

вывод: test

Но этот не будет работать:

"scripts": {
  "aaa": "set TMP=test",
  "bbb": "npm run aaa && echo %TMP%"
}

npm run bbb

вывод: <just empty>

Похоже, что для поиска созданной переменной требуются две отдельные команды npm run: переменная должна быть создана в первый npm run и может быть найден во втором.

0
ответ дан Sergey 19 March 2019 в 09:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: