第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在bat腳本中回顯控制臺輸出并將其發(fā)送到文件?

如何在bat腳本中回顯控制臺輸出并將其發(fā)送到文件?

繁花如伊 2019-11-25 10:34:07
我有一個執(zhí)行任務的批處理腳本,并將輸出發(fā)送到文本文件。有沒有辦法在控制臺窗口上也顯示輸出?例如:c:\Windows>dir > windows-dir.txt有沒有辦法dir在控制臺窗口中顯示輸出并將其輸出到文本文件中?
查看完整描述

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(并且不是很有用)。


希望能幫助到你。


查看完整回答
反對 回復 2019-11-25
?
牛魔王的故事

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


查看完整回答
反對 回復 2019-11-25
  • 3 回答
  • 0 關(guān)注
  • 3753 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號