विंडोज बैच: नई लाइन के बिना प्रतिध्वनि


231

लिनक्स शेल कमांड के बराबर विंडोज बैच क्या है echo -nजो आउटपुट के अंत में नई लाइन को दबाता है?

विचार एक लूप के अंदर एक ही लाइन पर लिखना है।



2
यह मेरे लगभग crazy..I पता था कि मिल गया echoसमय लग सकता है -n, लेकिन पर cmd.exeयह सिर्फ काम नहीं होता ^^
Panny

11
@ पैननी - सामान्य नाम के बावजूद, गूंज विंडोज और पॉज़िक्स के बीच समान कमांड नहीं है। Nslookup के समान, इसके विभिन्न विकल्प हैं। तो विंडोज के साथ करने के लिए एक प्रश्न के संदर्भ में टिप्पणी "मुझे पता था कि echoले सकता है -n", गलत है।
user66001

जवाबों:


236

का उपयोग कर setऔर /pआप newline के बिना गूंज कर सकते हैं पैरामीटर:

C:\> echo Hello World
Hello World

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

स्रोत


86
पाइप बहुत धीमा है क्योंकि यह दो अतिरिक्त सेमी-कार्य बनाता है, तेज है <nul set /p =Helloset /pपहले वर्ण और रिक्त स्थान / टैब के रूप में एक समान चिह्न नहीं गूँज सकता है।
जेब

11
यह लगभग 15 बार अपने सिस्टम पर तेज है
जेब

28
घ के बाद बाहरी स्थान को रोकने के लिए "हैलो वर्ल्ड" के आसपास उद्धरण जोड़ें।
ब्रायन

13
चेतावनी: इससे ERRORLEVEL बदल जाएगा 1. उत्तर देखें @xmechanix द्वारा।
कोपर्निक

6
@ user246694 डिवाइस < nulसे पुनर्निर्देशन NULहै। यह कुछ भी नहीं है, लेकिन उस के लिए पर्याप्त है set /pउपयोगकर्ता इनपुट के लिए इंतज़ार कर बंद करने के लिए
जेब

100

उपयोग करना: echo | set /p=या <NUL set /p=दोनों नई लाइन को दबाने का काम करेंगे।

हालाँकि, यह बहुत खतरनाक हो सकता है जब ERRORLEVEL की जाँच करते समय अधिक उन्नत स्क्रिप्ट लिखना महत्वपूर्ण हो जाता है, क्योंकि set /p=एक चर नाम निर्दिष्ट किए बिना सेटिंग ERRORLEVEL को 1 पर सेट कर देगा।

एक बेहतर तरीका सिर्फ एक डमी चर नाम का उपयोग करना होगा:
echo | set /p dummyName=Hello World

यह बिल्कुल वही पैदा करेगा जो आप बिना किसी डरपोक सामग्री के पृष्ठभूमि में चल रहे हैं जैसा कि मुझे कठिन रास्ता खोजना था, लेकिन यह केवल पाइप किए गए संस्करण के साथ काम करता है; <NUL set /p dummyName=Helloअभी भी ERRORLEVEL को 1 तक बढ़ाएगा।


20
चेतावनी: यह कमांड 0. के लिए ERRORLEVEL सेट करेगा। यदि ERRORLEVEL अधिक था, तो यह ERRORLEVEL को 0. में बदल देगा। अधिक उन्नत स्क्रिप्ट लिखने पर यह खतरनाक भी हो सकता है। (लेकिन जवाब के लिए +1)
कोपरनिक

इसलिए आपको मूल रूप से एक IF ERRORLEVEL == 0 (...) ELSE (...) की आवश्यकता है, बस उन परिस्थितियों में अपने पर्यावरण को नुकसान न पहुंचाएं। शीश।
सिल्वरबैकनेट

28

सरल सेट / पी विधि की सीमाएं हैं जो विंडोज संस्करणों के बीच थोड़ा भिन्न होती हैं।

  • अग्रणी उद्धरण छीन लिए जा सकते हैं

  • सफेद जगह छीन ली जा सकती है

  • अग्रणी =में सिंटेक्स त्रुटि का कारण बनता है।

अधिक जानकारी के लिए http://www.dostips.com/forum/viewtopic.php?f=3&t=4209 देखें ।

jeb ने एक चतुर समाधान पोस्ट किया है जो बिना लाइनफीड के आउटपुट टेक्स्ट में अधिकांश समस्याओं को हल करता है , यहां तक ​​कि अग्रणी स्थान या = के साथ मैंने इस विधि को परिष्कृत किया है ताकि यह विंडोज के किसी भी संस्करण पर नई पंक्ति के बिना किसी भी मान्य बैच स्ट्रिंग को सुरक्षित रूप से प्रिंट कर सके। XP से आगे। ध्यान दें कि :writeInitializeविधि में एक स्ट्रिंग शाब्दिक है जो साइट पर अच्छी तरह से पोस्ट नहीं हो सकता है। एक टिप्पणी शामिल है जो वर्णन करती है कि चरित्र अनुक्रम क्या होना चाहिए।

:writeऔर :writeVarतरीकों ऐसी है कि केवल परेशानी प्रमुख पात्रों वाली स्ट्रिंग को जेब की प्रतिलिपि विधि के अपने संशोधित संस्करण का उपयोग कर लिखा जाता है अनुकूलित कर रहे हैं। गैर-परेशानी वाले तार सरल और तेज़ SET / P पद्धति का उपयोग करके लिखे गए हैं।

@echo off
setlocal disableDelayedExpansion
call :writeInitialize
call :write "=hello"
call :write " world!%$write.sub%OK!"
echo(
setlocal enableDelayedExpansion
set lf=^


set "str= hello!lf!world^!!!$write.sub!hello!lf!world"
echo(
echo str=!str!
echo(
call :write "str="
call :writeVar str
echo(
exit /b

:write  Str
::
:: Write the literal string Str to stdout without a terminating
:: carriage return or line feed. Enclosing quotes are stripped.
::
:: This routine works by calling :writeVar
::
setlocal disableDelayedExpansion
set "str=%~1"
call :writeVar str
exit /b


:writeVar  StrVar
::
:: Writes the value of variable StrVar to stdout without a terminating
:: carriage return or line feed.
::
:: The routine relies on variables defined by :writeInitialize. If the
:: variables are not yet defined, then it calls :writeInitialize to
:: temporarily define them. Performance can be improved by explicitly
:: calling :writeInitialize once before the first call to :writeVar
::
if not defined %~1 exit /b
setlocal enableDelayedExpansion
if not defined $write.sub call :writeInitialize
set $write.special=1
if "!%~1:~0,1!" equ "^!" set "$write.special="
for /f delims^=^ eol^= %%A in ("!%~1:~0,1!") do (
  if "%%A" neq "=" if "!$write.problemChars:%%A=!" equ "!$write.problemChars!" set "$write.special="
)
if not defined $write.special (
  <nul set /p "=!%~1!"
  exit /b
)
>"%$write.temp%_1.txt" (echo !str!!$write.sub!)
copy "%$write.temp%_1.txt" /a "%$write.temp%_2.txt" /b >nul
type "%$write.temp%_2.txt"
del "%$write.temp%_1.txt" "%$write.temp%_2.txt"
set "str2=!str:*%$write.sub%=%$write.sub%!"
if "!str2!" neq "!str!" <nul set /p "=!str2!"
exit /b


:writeInitialize
::
:: Defines 3 variables needed by the :write and :writeVar routines
::
::   $write.temp - specifies a base path for temporary files
::
::   $write.sub  - contains the SUB character, also known as <CTRL-Z> or 0x1A
::
::   $write.problemChars - list of characters that cause problems for SET /P
::      <carriageReturn> <formFeed> <space> <tab> <0xFF> <equal> <quote>
::      Note that <lineFeed> and <equal> also causes problems, but are handled elsewhere
::
set "$write.temp=%temp%\writeTemp%random%"
copy nul "%$write.temp%.txt" /a >nul
for /f "usebackq" %%A in ("%$write.temp%.txt") do set "$write.sub=%%A"
del "%$write.temp%.txt"
for /f %%A in ('copy /z "%~f0" nul') do for /f %%B in ('cls') do (
  set "$write.problemChars=%%A%%B    ""
  REM the characters after %%B above should be <space> <tab> <0xFF>
)
exit /b

1
एक बहुत ही शक्तिशाली समाधान देखकर अच्छा लगा जो सभी पात्रों को संभाल सकता है
जेब

2
मैं यह बताना चाहता हूं कि अगर कंप्यूटर का इंटरनेट से नेटवर्क कनेक्शन होता है, तो मोटे तौर पर इस बैच कोड का उपयोग कंप्यूटर पर अजगर या किसी अन्य चीज को डाउनलोड करने और इंस्टॉल करने के लिए किया जा सकता है, जो आपको बैच से छुटकारा दिला सकता है। बैच मजेदार है, लेकिन यह वीक क्षमताओं के लिए सबसे अच्छी है।
n611x007

6 लाइन पर @dbenham "इको" (जो कि कार्यात्मक रूप से "इको" के समान है - पहले ऐसा नहीं देखा गया था।
आर

2
@SkipR - हां, यह कार्यात्मक रूप से वैसा ही है ECHO., सिवाय ECHO.अस्पष्ट परिस्थितियों में विफल हो सकता है । अन्य रूपों का एक गुच्छा है जो अस्पष्ट स्थितियों में भी विफल हो सकते हैं। केवल एक ही हमेशा काम करता है ECHO(
dbenham

10

@ Xmechanix के उत्तर के परिशिष्ट के रूप में, मैंने एक फ़ाइल में सामग्री लिखने के माध्यम से देखा:

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

यह मुद्रित स्ट्रिंग के अंत में एक अतिरिक्त स्थान जोड़ देगा , जो असुविधाजनक हो सकता है, विशेष रूप से जब से हम स्ट्रिंग के अंत में एक नई लाइन (एक अन्य व्हाट्सएप चरित्र) जोड़ने से बचने की कोशिश कर रहे हैं।

सौभाग्य से, स्ट्रिंग को मुद्रित करने के लिए उद्धृत करना, अर्थात उपयोग करना:

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

किसी भी newline या अंतरिक्ष चरित्र के बिना अंत में स्ट्रिंग प्रिंट करेगा।


5
अतिरिक्त स्थान गायब हो जाना चाहिए यदि आप बीच में स्थान नहीं रखते हैं Worldऔर >...
aschipfl

@aschipfl ने कोशिश की, यह नहीं है।
जोन ब्रुगुएरा

कोटेड वैरिएबल मेथड, सेट कमांड का एक अनकम्फर्टेबल फीचर है, आमतौर पर मैं देखता हूं कि इसे कैसे एप्रोच किया जाना चाहिए, क्योंकि यह वाइंड्स एनटी के सभी संस्करणों में काम करता है (और 9x अगर मुझे याद है)। यह है कि आप वैराइटी नाम को उद्धरण में मूल्य के अंत तक लपेटते हैं। यह सेट / पी के लिए भी सही है।
बेन पर्सिक

1
IE: गूंज | set / p "dummyName = हैलो वर्ल्ड"> somefile.txt
बेन

2
यदि आप उद्धरण नहीं करते हैं, और आप एक पाइप करते हैं तो @aschipfl एक अतिरिक्त स्थान दिखाई देगा। xxd एक हेक्स डंप यूटिलिटी है, इसलिए हम देखते हैं कि उदाहरण set /p="abc"<nul|xxd -pदिखाता है 616263 जबकि set /p=abc<nul|xxd -pदेता है61626320
barlop

9

एसईटी / पी में छीन सफेद जगह के लिए एक समाधान:

ट्रिक वह बैकस्पेस चार है जिसे आप डॉस के लिए टेक्स्ट एडिटर EDIT में समन कर सकते हैं । EDIT में इसे बनाने के लिए ctrlP + ctrlH दबाएँ । मैं इसे यहाँ पेस्ट करूँगा लेकिन यह वेबपेज इसे प्रदर्शित नहीं कर सकता है। यह नोटपैड पर दिखाई देता है (यह केंद्र में एक सफेद सर्कल के साथ एक छोटे काले आयत की तरह है, यह वैरिड है)

इसलिए आप इसे लिखें:

<nul set /p=.9    Hello everyone

डॉट किसी भी चार हो सकता है, यह केवल सेट / पी बताने के लिए है कि पाठ वहां शुरू होता है, रिक्त स्थान से पहले, और " हैलो " पर नहीं। " 9 " बैकस्पेस चार का एक प्रतिनिधित्व है जिसे मैं यहां प्रदर्शित नहीं कर सकता। आप 9 के बजाय यह डाल करने के लिए है, और इसे नष्ट करेगा " , जिसके बाद आप इस मिल जाएगा":

    Hello Everyone

के बजाय:

Hello Everyone

मुझे उम्मीद है यह मदद करेगा


2
मैं बताना भूल गया, यह विंडोज 7 में काम करता है। यह केवल एक बैच में कमांड लाइन में काम नहीं करेगा। किसी को भी चर
Pedro

इको के लिए भी सच है
बेन पर्सिक

... तो, एक बहुत लानत खोज करने के बाद मुझे यह नेट पर कहीं भी नहीं मिला। यह एक बार हो सकता है कि मैंने वास्तव में कुछ खोजा है, और गूंगा भाग्य से। यदि आप नहीं जानते हैं कि आप विरासत वर्ण में अपना cmd प्रॉम्प्ट डाल सकते हैं और सही फ़ॉन्ट का उपयोग कर सकते हैं, तो आप वर्णों में प्रवेश कर सकते हैं। ... लेकिन अगर आप किसी भी चीज़ को फ़ाइल या> कोन पर पुनर्निर्देशित करते हैं तो यह भी काम करता है। गंभीरता से। इसे तुरंत अपने कमांड प्रॉम्प्ट में पेस्ट करें: "इको ◙◙ c○○ har हरहरार !! ◙ LY ------------- -------- worst I am the bad!!: '(○ LY) ○ NOPE! • ♪ ○ मुझे बहुत अच्छा लगता है! Hazzah-le-oop! ◙◙ me मैं प्रोग्राममेकर हूं ... कुछ सुनाई देता है। "
ब्रेंट रिटेनहाउस

ठीक है, मुझे आशा है कि मुझे यह किसी और से पहले पता चला लेकिन ... यह एक यूनिकोड कोड पृष्ठ में नहीं होने पर निर्भर है। आप शुरू में एक चर 437 chcp में सेट कर सकते हैं, एक चर में सेट करें, या इसे आउटपुट करें, और फिर वापस स्विच करें (और यह अभी भी आउटपुट होना चाहिए)। मैं इसके साथ अभी भी खेल रहा हूं।
ब्रेंट रिटेनहाउस

इसके अलावा, किसी को भी पता नहीं क्यों clear सी स्क्रीन को साफ करता है ?! मैं नेट पर कहीं भी इसका उदाहरण नहीं खोज सकता। यह विशिष्ट रूप से वह संयोजन है, हालाँकि आप दो वर्णों के बीच भी व्हाट्सएप करने में सक्षम हैं। किसी भी अन्य चरित्र के लिए यह सिर्फ लगता है .. पहले चरित्र को हटा दें। मुझे यह नहीं मिला ...
ब्रेंट रिटेनहाउस

7

आप gnuwin32 ( coreutils पैकेज) से "tr" का उपयोग करके नई लाइन हटा सकते हैं

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

वैसे, अगर आप बहुत सारी स्क्रिप्टिंग कर रहे हैं, तो gnuwin32 एक गोल्डमाइन है।


मैं गिट बैश लगाने का सुझाव भी देता हूं । यकीन है कि यह gnuwin32 के समान नहीं है (और यह एक सोने की खान है इसलिए +1), यह सिर्फ एक अच्छा सेटअप है, और आपके पास प्रारंभ मेनू बटन सहित लगभग हर जगह सही माउस बटन पर गिट-बैश है।
हकरे

क्या आप ट्राय का उपयोग केवल अंतिम स्थान वर्ण को हटाने के लिए कर सकते हैं, जैसे trim?
Panny

ट्रिम के लिए sed का उपयोग करें: sed -e "s / * $ //"
BearCode

@ पैननी - मुझे ट्रिम नामक एक पॉज़िक्स / लाइनक्स उपयोग नहीं मिल सकता है। इसके अलावा, \r, \nया \r\n(OSX, POSIX और Windows क्रमशः में नई लाइनों) "अंतरिक्ष" वर्ण नहीं हैं।
user66001

5

यहां एक और तरीका है, यह पॉवर्सल-होस्ट-होस्ट का उपयोग करता है जिसमें एक -NoNewLine पैरामीटर है, जो कि साथ गठबंधन करता है start /bऔर यह बैच से समान कार्यक्षमता प्रदान करता है।

NoNewLines.cmd

@ECHO OFF
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 1 - ';Write-Host -NoNewLine 'Result 2 - ';Write-Host -NoNewLine 'Result 3 - '"
PAUSE

उत्पादन

Result 1 - Result 2 - Result 3 - Press any key to continue . . .

यह नीचे थोड़ा अलग है, ठीक उसी तरह काम नहीं करता जैसे ओपी चाहता है, लेकिन दिलचस्प है क्योंकि प्रत्येक परिणाम एक काउंटर का अनुकरण करते हुए पिछले परिणाम को ओवरराइट करता है।

@ECHO OFF
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 1 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 2 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 3 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 4 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 5 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 6 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 7 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 8 - '"
start /b /wait powershell.exe -command "Write-Host -NoNewLine 'Result 9 - '"
PAUSE


2

शायद यह आपकी तलाश है, यह एक पुरानी स्कूल स्क्रिप्ट है ...: पी

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%" "उदाहरण संदेश" के बाद वास्तव में एक दृश्यमान चरित्र को जोड़े बिना "पॉज कमांड के आउटपुट" को अलग करने के लिए "उदाहरण संदेश" के बाद रिक्त स्थान जोड़ने के लिए बैकस्पेस का उपयोग करता है। हालांकि, यह एक नियमित प्रतिशत संकेत के साथ भी संभव है।


2
मैं इस set nl=^& echo.ट्रिक को हर जगह देखता हूं और वेरिएबल का नाम भ्रामक है। % nl% एक नई पंक्ति वर्ण नहीं है : यह अंत में आप हर बार एक नई कमांड चला रहे हैं , इसलिए नई पंक्ति में फैलता है । आप इसे लिखकर देख सकते हैं । तुम्हें पता है, चाल का खुलासा। आउटपुट समान है लेकिन आपके द्वारा सुझाए गए कारणों के लिए नहीं। &echo.echoecho "%nl%The%nl%new%nl%line%nl%is%nl%not%nl%apparent%nl%throughout%nl%text%nl%""& echo. The& echo. new& echo. line& echo. is& echo. not& echo. apparent& echo. throughout& echo. text& echo. "
cdlvcdlv

2

DIY cw.exe(कंसोल लिखें) उपयोगिता

यदि आप इसे-ऑफ-द-बॉक्स, ऑफ-द-शेल्फ नहीं पाते हैं, तो आप DIY कर सकते हैं। इस cwउपयोगिता के साथ आप हर तरह के पात्रों का उपयोग कर सकते हैं। कम से कम, मैं ऐसा सोचना चाहूंगा। कृपया तनाव-परीक्षण करें और मुझे बताएं।

उपकरण

आपको केवल .NET स्थापित करना है, जो आजकल बहुत आम है।

सामग्री

कुछ वर्ण टाइप / कॉपी-पेस्ट किए गए।

कदम

  1. .batनिम्न सामग्री के साथ फ़ाइल बनाएँ ।
/* >nul 2>&1

@echo off
setlocal

set exe=cw
for /f "tokens=* delims=" %%v in ('dir /b /s /a:-d  /o:-n "%SystemRoot%\Microsoft.NET\Framework\*csc.exe"') do set "csc=%%v"

"%csc%" -nologo -out:"%exe%.exe" "%~f0"

endlocal
exit /b %errorlevel%

*/

using System;

namespace cw {
    class Program {
        static void Main() {
            var exe = Environment.GetCommandLineArgs()[0];
            var rawCmd = Environment.CommandLine;
            var line = rawCmd.Remove(rawCmd.IndexOf(exe),exe.Length).TrimStart('"');
            line = line.Length < 2 ? "\r" : line.Substring(2) ;
            Console.Write(line);
        }
    }
}
  1. चलाओ।

  2. अब आपके पास एक अच्छा 4KB उपयोगिता है जिससे आप हटा सकते हैं .bat

वैकल्पिक रूप से, आप किसी भी बैच में एक सबरूटीन के रूप में इस कोड को सम्मिलित कर सकते हैं, जिसके परिणामस्वरूप भेजने .exeके लिए %temp%, अपने बैच में इसका इस्तेमाल करते हैं और उसे हटाने के काम पूरा हो जाने।

कैसे इस्तेमाल करे

यदि आप नई लाइन के बिना कुछ लिखना चाहते हैं:
cw Whatever you want, even with "", but remember to escape ^|, ^^, ^&, etc. unless double-quoted, like in "| ^ &".

यदि आप एक गाड़ी वापसी (लाइन की शुरुआत में जाना) चाहते हैं, तो बस चलाएं
cw

तो कमांड लाइन से यह कोशिश करें:

for /l %a in (1,1,1000) do @(cw ^|&cw&cw /&cw&cw -&cw&cw \&cw)

मैं आपके उत्तर से प्रेरित था और इस छोटे से टूल को गो और अज़ुर पाइपलाइनों के साथ इस कार्य के साथ बनाया। यह सिर्फ उस स्टडआउट को पकड़ता है जो कि एक विशिष्ट प्रारूप में निर्मित होता है और निर्माण द्वारा उठाया जाता है। धन्यवाद!
रिजेबॉस्च

2

मैंने @ कर्ण के विचार से एक समारोह बनाया:

इको | सेट / पी = "हैलो वर्ल्ड"

यह रहा:

:SL (sameline)
echo|set /p=%1
exit /b

इसका उपयोग call :SL "Hello There"
मैं जानता हूं कि यह कुछ खास नहीं है, लेकिन मुझे यह सोचने में इतना समय लगा कि मुझे लगा कि मैं इसे यहां पोस्ट करूंगा।


1

नमूना 1: यह बाहर निकलें कोड का काम करता है और उत्पादन करता है = 0. यह अच्छा है। ध्यान दें "।" , सीधे गूंज के बाद।

C: \ Users \ phife.dog \ gitrepos \ 1 \ repo_abc \ script # #echo
| set / p JUNK_VAR = यह एक संदेश है जो लिनक्स इको-एन की तरह प्रदर्शित होता है ... इसे प्रदर्शित करेगा ... और इको% ERRORLEVEL%

यह एक संदेश प्रदर्शित होता है जैसे लिनक्स इको-एन इसे प्रदर्शित करेगा ... 0

नमूना 2: यह काम करता है लेकिन बाहर निकलें कोड = 1. यह बुरा है। कृपया इको के बाद, "" की कमी पर ध्यान दें। यह अंतर प्रतीत होता है।

C: \ Users \ phife.dog \ gitrepos \ 1 \ repo_abc \ script # #echo
| set / p JUNK_VAR = यह एक संदेश है जो लिनक्स इको-एन की तरह प्रदर्शित होता है ... इसे प्रदर्शित करेगा ... और इको% ERRORLEVEL%

यह एक संदेश प्रदर्शित होता है जैसे लिनक्स इको-एन इसे प्रदर्शित करेगा ... 1


1

इस प्रश्न के उत्तर से प्रेरित होकर, मैंने एक सरल काउंटर बैच स्क्रिप्ट बनाई जो प्रगति मान (0-100%) को एक ही पंक्ति (पिछले एक को ओवरराइट करते हुए) को प्रिंट करती रहती है। शायद यह भी इसी तरह के समाधान की तलाश में दूसरों के लिए मूल्यवान होगा।

टिप्पणी : *गैर-मुद्रण योग्य वर्ण हैं, इन्हें [ Alt+ Numpad 0+ Numpad 8] कुंजी संयोजन का उपयोग करके दर्ज किया जाना चाहिए , जो कि backspaceचरित्र है।

@ECHO OFF

FOR /L %%A in (0, 10, 100) DO (     
    ECHO|SET /P="****%%A%%"    
    CALL:Wait 1
)

GOTO:EOF

:Wait
SET /A "delay=%~1+1"
CALL PING 127.0.0.1 -n %delay% > NUL
GOTO:EOF

0

मेरा मानना ​​है कि ऐसा कोई विकल्प नहीं है। वैकल्पिक रूप से आप यह कोशिश कर सकते हैं

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

3
यह अभी भी एक नई रूपरेखा मुद्रित करेगा।
रेने न्यफेनेगर

3
आप एक ही चर पर जितना चाहें उतना भर सकते हैं और बहुत ही अंत में केवल प्रतिध्वनित कर सकते हैं।
m0skit0

2
लूप करते समय या अंत में इसे प्रिंट करने से कोई फर्क नहीं पड़ता कि डेटा संरक्षित है या नहीं। प्रत्येक लूप के लिए आप डेटा को केवल संक्षिप्त करते हैं, और फिर जब लूप समाप्त हो जाता है तो आप उसे प्रिंट करते हैं। नतीजा वही है।
m0skit0

9
इससे कोई फर्क नहीं पड़ता कि यह लूप की प्रगति का संकेतक है।
gregseth

3
आपने कभी यह नहीं कहा कि आपके प्रश्न में या आपके प्रश्न में कहीं भी इस व्यवहार का अनुरोध किया गया है।
m0skit0

0

आप सेट / पी कमांड का उपयोग करके नई लाइन को दबा सकते हैं। सेट / पी कमांड एक स्थान को नहीं पहचानता है, इसके लिए आप इसे पहचानने के लिए एक डॉट और एक बैकस्पेस चरित्र का उपयोग कर सकते हैं। आप एक चर का उपयोग मेमोरी के रूप में भी कर सकते हैं और जो आप इसमें प्रिंट करना चाहते हैं उसे स्टोर कर सकते हैं, ताकि आप वाक्य के बजाय वेरिएबल को प्रिंट कर सकें। उदाहरण के लिए:

@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

इस तरह आप नई लाइन के बिना कुछ भी प्रिंट कर सकते हैं। मैंने पात्रों को एक-एक करके प्रिंट करने का कार्यक्रम बनाया है, लेकिन आप लूप बदलकर पात्रों के बजाय शब्दों का भी उपयोग कर सकते हैं।

उपरोक्त उदाहरण में मैंने "enableelayedexpansion" का उपयोग किया है, इसलिए सेट / पी कमांड पहचान नहीं करता है "!" चरित्र और उसके बजाय एक डॉट प्रिंट करता है। मुझे आशा है कि आपके पास विस्मयादिबोधक चिह्न का उपयोग नहीं है "!" ;)


-1

यहाँ देर से जवाब, लेकिन किसी को भी, जो एक लाइन के लिए विशेष वर्ण लिखने की जरूरत है, जो dbenham का उत्तर पाने के लिए लगभग 80 लाइनों बहुत लंबा है और जिनकी स्क्रिप्ट (शायद उपयोगकर्ता-इनपुट के कारण) का उपयोग कर की सीमाओं के तहत टूट सकता है set /p, यह शायद सबसे आसान है बस अपने .bat या .cmd को संकलित C ++ या C- भाषा निष्पादन योग्य और फिर सिर्फ coutया printfवर्णों के साथ जोड़ा जाए । यह आपको आसानी से एक पंक्ति में कई बार आसानी से लिखने की अनुमति देगा यदि आप एक प्रकार की प्रगति पट्टी या वर्णों का उपयोग करके कुछ दिखा रहे हैं, जैसा कि ओपी स्पष्ट रूप से था।


@jiggunjer तुम्हें यकीन है? printfएक विन -7 cmdफलक से आईएनजी मुझे देता है"'printf' is not recognized as an internal or external command, operable program or batch file."
18

printfखिड़कियों के मूल निवासी नहीं है। यह एक विंडोज़ प्रश्न है।
kayleeFrye_onDeck

1
@kayleeFrye_onDeck मुझे लगता है कि आपकी टिप्पणी जिग्गंजर पर निर्देशित है , मुझे नहीं; मैं अपने प्रश्न में सुझाव देता हूं कि सी और सी ++ का उपयोग उन मामलों में शेल कमांडों के लिए एक काफी प्लेटफ़ॉर्म-स्वतंत्र विकल्प के रूप में किया जा सकता है जहां प्रारूपण महत्वपूर्ण है।
सेलडोमनैडी

1
मुझे क्षमा कर दो, क्योंकि मैंने पिता को छोड़ दिया है।
kayleeFrye_onDeck

लेकिन फिर शेल के इनपुट को सही ढंग से पार्स करने की आवश्यकता है। उदाहरण के लिए, इस तरह का कार्यक्रम एक उद्धरण चिह्न कैसे प्रिंट करेगा?
एलेक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.