Windows批處理:回顯無新行


Answers

使用: echo | set /p= echo | set /p=或者<NUL set /p=都可以抑制換行符。

但是,在編寫更高級的腳本時,檢查ERRORLEVEL變得重要時,這會非常危險,因為設置set /p=而不指定變量名稱會將ERRORLEVEL設置為1。

更好的方法是使用如下的虛擬變量名稱:
echo | set /p dummyName=Hello World

這將會產生你想要的東西,而不會在背景中發生任何偷偷摸摸的事情,因為我必須找出困難的方式,但這只適用於管道版本; <NUL set /p dummyName=Hello仍然會將ERRORLEVEL提升為1。

Question

什麼是等同於Linux shell命令的Windows批處理命令echo -n在輸出結束時抑制換行符?

這個想法是寫在一個循環內的同一行。




也許這就是你要找的東西,這是一個老派的劇本...:P

set nl=^& echo. 
echo %nl%The%nl%new%nl%line%nl%is%nl%not%nl%apparent%nl%throughout%nl%text%nl%
echo only in prompt.
pause

或者也許你試圖更換當前行而不是寫入新行? 您可以通過在“。”之後刪除“%bs%”來試驗這一點。 並在“示例消息”之後隔開另一個“%bs%”。

for /f %%a in ('"prompt $H&for %%b in (1) do rem"') do set "bs=%%a"
<nul set /p=.%bs%         Example message         %bs%
pause

我覺得這很有趣,因為它使用一個變量來達到目的以外的目的。 正如你所看到的“%bs%”代表退格。 第二個“%bs%”使用退格在“示例消息”之後添加空格,以分隔“暫停命令的輸出”,而不在“示例消息”之後添加可見字符。 但是,這也可以通過正常百分比符號來實現。




SET / P中剝離的空白區域的解決方案:

訣竅是你可以在DOS的文本編輯器EDIT中召喚退格字符。 要在EDIT中創建它,請按ctrlP + ctrlH 。 我將它粘貼在這裡,但這個網頁無法顯示它。 它在記事本上是可見的(雖然它很乾淨,就像一個黑色的小矩形,中間有一個白色圓圈)

所以你寫這個:

<nul set /p=.9    Hello everyone

該點可以是任何字符,只是在那裡告訴SET / P文本從那裡開始,在空格之前,而不是在“ Hello ”處。 “ 9 ”表示退格字符,我不能在這裡顯示。 你必須把它代替9,它會刪除“ ”,之後你會得到這個:

    Hello Everyone

代替:

Hello Everyone

我希望它有幫助




作為@ xmechanix答案的附錄,我注意到通過將內容寫入文件:

echo | set /p dummyName=Hello World > somefile.txt

這將在打印的字符串的末尾添加額外的空間 ,這可能不方便,特別是因為我們試圖避免在字符串的末尾添加新行(另一個空白字符)。

幸運的是,引用要打印的字符串,即使用:

echo | set /p dummyName="Hello World" > somefile.txt

將在最後打印沒有任何換行符或空格字符的字符串。




示例1:這工作並產生退出代碼= 0.這是很好的。 注意“。” ,直接回顯後。

C:\ Users \ phife.dog \ gitrepos \ 1 \ repo_abc \ scripts#
@echo。| set / p JUNK_VAR =這是一條類似於Linux的消息echo -n會顯示它......&echo%ERRORLEVEL%

這是一條顯示的消息,就像Linux echo -n會顯示的那樣... 0

示例2:這個工作, 產生退出代碼= 1。這是不好的。 請注意迴聲後缺少“。”。 這似乎是不同的。

C:\ Users \ phife.dog \ gitrepos \ 1 \ repo_abc \ scripts#
@echo | set / p JUNK_VAR =這是一條類似於Linux的消息echo -n會顯示它......&echo%ERRORLEVEL%

這是一條顯示為Linux回顯的消息-n會顯示它... 1




對於需要在一行中寫出特殊字符的人來說,如果dbenham的答案大概有80行太長,並且腳本可能會由於使用set /p而受到限制(可能是由於用戶輸入引起的) set /p ,只需要將.bat或.cmd與編譯的C ++或C語言可執行文件配對,然後只是coutprintf字符就可能是最簡單的。 如果您顯示某種進度條或某些使用字符的內容,這也可以讓您輕鬆地多次寫入一行,就像OP顯然是。






Related