batch-file file - Windows批處理:回顯無新行





tag (12)


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

什麼是等同於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%”使用退格在“示例消息”之後添加空格,以分隔“暫停命令的輸出”,而不在“示例消息”之後添加可見字符。 但是,這也可以通過正常百分比符號來實現。




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

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

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

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

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

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




您可以使用set / p命令禁止新行。 set / p命令無法識別空間,因為您可以使用點和退格字符來識別它。 您也可以使用變量作為內存並存儲要打印的內容,以便打印變量而不是句子。 例如:

@echo off
setlocal enabledelayedexpansion
for /f %%a in ('"prompt $H & for %%b in (1) do rem"') do (set "bs=%%a")
cls
set "var=Hello World! :)"
set "x=0"

:loop
set "display=!var:~%x%,1!"
<nul set /p "print=.%bs%%display%"
ping -n 1 localhost >nul
set /a "x=%x% + 1"
if "!var:~%x%,1!" == "" goto end
goto loop

:end
echo.
pause
exit

用這種方法,你可以打印任何東西而不用換行。 我已經讓程序逐個打印字符,但是您可以通過更改循環來使用字符而不是字符。

在上面的例子中,我使用了“enabledelayedexpansion”,所以set / p命令不能識別“!” 字符並打印一個點而不是那個。 我希望你沒有使用感嘆號“!” ;)




示例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




使用set/p參數可以在不換行的情況下進行回顯:

C:\> echo Hello World
Hello World

C:\> echo|set /p="Hello World"
Hello World
C:\>

Source




使用: 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。




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

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

所以你寫這個:

<nul set /p=.9    Hello everyone

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

    Hello Everyone

代替:

Hello Everyone

我希望它有幫助




我相信沒有這樣的選擇。 或者,你可以試試這個

set text=Hello
set text=%text% world
echo %text%



你可以使用gnuwin32( coreutils包)中的“tr”來移除換行符,

@echo off
set L=First line
echo %L% | tr -d "\r\n"
echo Second line
pause

順便說一句,如果你正在做大量的腳本,gnuwin32是一個金礦。




Python 3.4於2014年3月發布,附帶包括:
http://docs.python.org/3.4/whatsnew/3.4.html
因此,自Python 3.4發布以來,在Windows上安裝pip的最新方法就是安裝Python。 在安裝過程中堅持所有默認值時,將安裝pip
C:\Python34\Scripts\pip3.exe





windows batch-file cmd newline