3 回答

TA貢獻1806條經(jīng)驗 獲得超5個贊
不,您不能使用純重定向。
但是,您可以使用一些技巧(例如tee.bat)。
我嘗試解釋一下重定向。
使用> file或<file重定向十個流之一。
如果重定向是在命令之前還是之后,則這并不重要,因此這兩行幾乎相同。
dir > file.txt
> file.txt dir
在此示例中,重定向只是1>的快捷方式,這意味著將對流1(STDOUT)進行重定向。
因此,您可以在任何流之前添加數(shù)字,例如2> err.txt,也可以在一行中重定向多個流。
dir 1> files.txt 2> err.txt 3> nothing.txt
在此示例中,“標準輸出”將進入files.txt,所有錯誤都將在err.txt中,stream3將進入nothing.txt(DIR不使用流3)。
Stream0是STDIN
Stream1是STDOUT Stream2
是STDERR
Stream3-9未使用
但是,如果您嘗試多次重定向同一流,會發(fā)生什么情況?
dir > files.txt > two.txt
“只能有一個”,它永遠是最后一個!
因此等于dir> two.txt
好的,還有一種可能,將一個流重定向到另一個流。
dir 1>files.txt 2>&1
2>&1將stream2重定向到stream1,而1> files.txt將所有都重定向到files.txt。
這里的順序很重要!
dir ... 1>nul 2>&1
dir ... 2>&1 1>nul
是不同的。第一個將所有(STDOUT和STDERR)重定向到NUL,
但是第二行將STDOUT重定向到NUL,將STDERR重定向到“空” STDOUT。
作為一個結(jié)論,很明顯為什么OtávioDécio和andynormancx的示例無法正常工作。
command > file >&1
dir > file.txt >&2
兩者都嘗試將stream1重定向兩次,但是“只能有一個”,并且始終是最后一個。
所以你得到
command 1>&1
dir 1>&2
并且在第一個示例中,不允許將stream1重定向到stream1(并且不是很有用)。
希望能幫助到你。

TA貢獻1830條經(jīng)驗 獲得超3個贊
是的,有一種方法可以在控制臺(屏幕)和文件中顯示單個命令輸出。使用您的示例,使用...
@ECHO OFF
FOR /F "tokens=*" %%I IN ('DIR') DO ECHO %%I & ECHO %%I>>windows-dir.txt
詳細說明:
該FOR命令將命令或文本的輸出解析為變量,可以多次引用該變量。
對于諸如的命令,請DIR /B用單引號引起來,如下例所示。將DIR /B文本替換為所需的命令。
FOR /F "tokens=*" %%I IN ('DIR /B') DO ECHO %%I & ECHO %%I>>FILE.TXT
要顯示文本,請用雙引號引起來,如下例所示。
FOR /F "tokens=*" %%I IN ("Find this text on console (screen) and in file") DO ECHO %%I & ECHO %%I>>FILE.TXT
...以及換行...
FOR /F "tokens=*" %%I IN ("Find this text on console (screen) and in file") DO (
ECHO %%I & ECHO %%I>>FILE.TXT
)
如果您有時只希望在控制臺(屏幕)上輸出,而有時只希望將輸出發(fā)送到文件,而有時又希望同時發(fā)送給兩個文件,請使用變量指定FOR循環(huán)的“ DO”子句,如下所示%TOECHOWHERE%。
@ECHO OFF
FOR %%I IN (TRUE FALSE) DO (
FOR %%J IN (TRUE FALSE) DO (
SET TOSCREEN=%%I & SET TOFILE=%%J & CALL :Runit)
)
GOTO :Finish
:Runit
REM Both TOSCREEN and TOFILE get assigned a trailing space in the FOR loops
REM above when the FOR loops are evaluating the first item in the list,
REM "TRUE". So, the first value of TOSCREEN is "TRUE " (with a trailing
REM space), the second value is "FALSE" (no trailing or leading space).
REM Adding the ": =" text after "TOSCREEN" tells the command processor to
REM remove all spaces from the value in the "TOSCREEN" variable.
IF "%TOSCREEN: =%"=="TRUE" (
IF "%TOFILE: =%"=="TRUE" (
SET TEXT=On screen, and in "FILE.TXT"
SET TOECHOWHERE="ECHO %%I & ECHO %%I>>FILE.TXT"
) ELSE (
SET TEXT=On screen, not in "FILE.TXT"
SET TOECHOWHERE="ECHO %%I"
)
) ELSE (
IF "%TOFILE: =%"=="TRUE" (
SET TEXT=Not on screen, but in "FILE.TXT"
SET TOECHOWHERE="ECHO %%I>>FILE.txt"
) ELSE (
SET TEXT=Not on screen, nor in "FILE.TXT"
SET TOECHOWHERE="ECHO %%I>NUL"
)
)
FOR /F "tokens=*" %%I IN ("%TEXT%") DO %TOECHOWHERE:~1,-1%
GOTO :eof
:Finish
ECHO Finished [this text to console (screen) only].
PAUSE
- 3 回答
- 0 關(guān)注
- 3753 瀏覽
添加回答
舉報