C:\>type c:\output.txt
abcd
C:\>type c:\output.txt | set /p V1=
C:\>set
... A bunch of junk, NOT seeing "V1"
Что случилось? Согласно всей документации для SET
Я видел, %V1% должен был быть присвоен значение "abcd" от вышеупомянутого, нет?
Я нахожусь на Windows XP Pro, SP3, если он имеет значение.
Я не знаю, какой документ вы видели для команды set
, но результат set /?
четко указано:
Переключатель / P позволяет вам установить значение переменной для строки ввода, введенной пользователем .
(курсив мой). Я думаю, что set / p
получает ввод с консоли независимо от того, что вы пытаетесь передать через стандартный ввод. Почему не ждет, я не уверен. echo xxx | set / p xx =
также не может установить переменную.
Но если вы хотите установить переменную из однострочного файла, вы можете просто использовать один из них:
for /f "delims=" %%i in (c:\output.txt) do set V1=%%i
set /p V1=<c:\output.txt
Второй самый простой, но он не очень помогает, если вы хотите получить вывод произвольная команда, но вам может потребоваться сначала направить ее в файл.
Первый позволяет выполнять произвольные команды без временных файлов:
for /f "delims=" %%i in ('echo AAA') do set xx=%%i
На этой странице есть интересный фрагмент, в котором предполагается, что это связано с контекстами:
Хорошо, я сам выяснил, почему. Это потому, что
|
создает новый контекст, поэтому переменная никогда не попадает в остальную часть текущего контекста. Доказательство:
> set bar =
> echo aaa | (set / p bar = && set bar)
bar = aaa
> set bar
Бар переменных среды не определен
, хотя я отказываюсь комментировать правдивость этого вывода. Я не знаю, что такое контексты в этом смысле, я просто предлагаю вашему вниманию для полноты картины.