উইন্ডোজ ব্যাচ: নতুন লাইন ছাড়া প্রতিধ্বনি


231

লিনাক্স শেল কমান্ডের উইন্ডোজ ব্যাচের সমতুল্য echo -nযা আউটপুট শেষে নিউলাইনটি দমন করে?

লুপের ভিতরে একই লাইনে লেখার ধারণাটি।



2
এটি আমাকে প্রায় পাগল পেয়েছে..আমি জানতাম echoযে নিতে পারে -nতবে cmd.exeএটি ঠিক কাজ করে না
প্যানি

11
@ পাণি - সাধারণ নাম সত্ত্বেও, উইন্ডো এবং পিক্সিকের মধ্যে ইকো একই কমান্ড নয়। এনএসলুপ হিসাবে একই, এর বিভিন্ন বিকল্প রয়েছে। তাই মন্তব্য "আমি জানতাম echoসময় লাগতে পারে -n" একটি প্রশ্ন প্রেক্ষাপটে উইন্ডোজের সাথে করতে হবে, ভুল।
ব্যবহারকারী 66001

উত্তর:


236

ব্যবহার করে setএবং /pপ্যারামিটারটি আপনি নিউলাইন ছাড়াই প্রতিধ্বনিত করতে পারেন:

C:\> echo Hello World
Hello World

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

উৎস


86
যেমন দুটি অতিরিক্ত cmd কমান্ড-কর্ম সৃষ্টি, দ্রুততর নল খুব ধীর <nul set /p =Helloset /pপ্রথম অক্ষর বা স্পেস / ট্যাব হিসাবে সমান চিহ্ন প্রতিধ্বনিত করতে পারে না।
jeb

11
এটি আমার সিস্টেমে প্রায় 15 গুণ বেশি দ্রুত
জেব je

28
"হ্যালো ওয়ার্ল্ড" এর আশেপাশে উদ্ধৃতি যুক্ত করুন ডি এর পরে বহিরাগত স্থানটি রোধ করতে।
ব্রায়ান

13
সতর্কতা: এটি ERRORLEVEL 1 এ পরিবর্তন করবে। @Xmechanix এর উত্তর দেখুন।
কপারনিক

6
@ ব্যবহারকারী 246694 ডিভাইস < nulথেকে পুনঃনির্দেশ is 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
সতর্কতা: এই আদেশটি ERRORLEVEL 0 এ সেট করবে E (তবে উত্তরের জন্য +1)
কপারনিক

সুতরাং আপনার এই পরিস্থিতিতে আপনার পরিবেশের ক্ষতি না করার জন্য আপনার যদি মূলত একটি ERRORLEVEL == 0 (...) এলএসই (...) প্রয়োজন। Sheesh।
সিলভারব্যাক

28

সাধারণ এসইটি / পি পদ্ধতির সীমাবদ্ধতা রয়েছে যা উইন্ডোজ সংস্করণগুলির মধ্যে কিছুটা পৃথক হয়।

  • শীর্ষস্থানীয় উক্তিগুলি ছিনতাই হতে পারে

  • শীর্ষস্থানীয় সাদা স্থান ছিনিয়ে নেওয়া যেতে পারে

  • শীর্ষস্থানীয় =কারণে একটি সিনট্যাক্স ত্রুটি হয়।

আরও তথ্যের জন্য http://www.dostips.com/forum/viewtopic.php?f=3&t=4209 দেখুন ।

জেবি একটি চৌকস সমাধান পোস্ট করেছে যা আউটপুট পাঠ্যটিতে বেশিরভাগ সমস্যার সমাধান করে লাইনফিড ছাড়াই, এমনকি শীর্ষস্থান সহ বা = আমি পদ্ধতিটি পরিমার্জন করেছি যাতে এটি নিরাপদে নতুন লাইন ছাড়া কোনও বৈধ ব্যাচের স্ট্রিংটি উইন্ডোজের যে কোনও সংস্করণে মুদ্রণ করতে পারে এক্সপি থেকে নোট করুন যে:writeInitialize পদ্ধতিতে একটি স্ট্রিং আক্ষরিক রয়েছে যা সাইটে ভাল পোস্ট করা যায় না। একটি মন্তব্য অন্তর্ভুক্ত করা হয়েছে যা বর্ণের ক্রমটি কী হওয়া উচিত তা বর্ণনা করে।

:writeএবং :writeVarপদ্ধতি যেমন যে শুধুমাত্র বিরক্তিজনক নেতৃস্থানীয় অক্ষর ধারণকারী স্ট্রিং Jeb এর কপি পদ্ধতি আমার পরিমার্জিত সংস্করণ ব্যবহার করে লেখা হয় অপ্টিমাইজ করা হয়। সহজ এবং দ্রুত এসইটি / পি পদ্ধতি ব্যবহার করে ঝামেলাবিহীন স্ট্রিং লিখিত হয়।

@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
@ স্কিপিআর - হ্যাঁ, এটি কার্যত একইরকম ECHO., বাদে ECHO.অস্পষ্ট পরিস্থিতিতে ব্যর্থ হতে পারে । অন্যান্য ফর্মগুলির একটি গুচ্ছ রয়েছে যা অস্পষ্ট পরিস্থিতিতেও ব্যর্থ হতে পারে। সর্বদা একমাত্র কাজ করে ECHO(
dbenham

10

@ Xmechanix এর উত্তরের সংযোজন হিসাবে আমি একটি ফাইলে বিষয়বস্তু লেখার মাধ্যমে লক্ষ্য করেছি:

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

এটি মুদ্রিত স্ট্রিংয়ের শেষে একটি অতিরিক্ত স্থান যুক্ত করবে , যা অসুবিধাগ্রস্ত হতে পারে, বিশেষত যেহেতু আমরা স্ট্রিংয়ের শেষে একটি নতুন লাইন (অন্য একটি সাদা বর্ণচিহ্ন) যুক্ত করা এড়াতে চাইছি।

ভাগ্যক্রমে, মুদ্রণের জন্য স্ট্রিং উদ্ধৃত করা, অর্থাত:

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

শেষে কোনও নিউলাইন বা স্পেস অক্ষর ছাড়াই স্ট্রিংটি মুদ্রণ করবে।


5
আপনি Worldএবং >... এর মধ্যে কোনও স্থান না রাখলে অতিরিক্ত স্থান অদৃশ্য হয়ে যায়
aschipfl

@ আসচিপএফএল চেষ্টা করেছেন, তা হয় না।
জোয়ান ব্রুগুয়েরা

কোটেড ভেরিয়েবল মেথড, সেট কমান্ডের একটি অননুমোদিত বৈশিষ্ট্য, সাধারণত আমি কীভাবে দেখি যে এটির সাথে যোগাযোগ করা উচিত, কারণ এটি উইন্ডোজ এনটি-র সমস্ত সংস্করণে কাজ করে (এবং যদি আমি মনে করি 9x)। এটি হ'ল আপনি উদ্ধৃতিতে মানের শেষে ভেরিয়েবল নামটি মুড়ে দিন। এটি সেট / পি হিসাবেও সত্য।
বেন পার্সোনিক 24:58

1
আইই: প্রতিধ্বনি | set / p "dummyName = হ্যালো ওয়ার্ল্ড"> somefile.txt
বেন পারসোনিক

2
@ এসকিপএফএল একটি অতিরিক্ত জায়গা উপস্থিত হবে যদি আপনি কোট না করেন এবং আপনি একটি পাইপ করেন। এক্সএক্সডি হেক্স ডাম্প ইউটিলিটি তাই আমরা উদাহরণস্বরূপ set /p="abc"<nul|xxd -pপ্রদর্শন করি 616263 যেখানে set /p=abc<nul|xxd -pদেয়61626320
বার্লপ

9

এসইটি / পি তে স্ট্রিপড সাদা স্থানের জন্য একটি সমাধান:

কৌশলটি হ'ল ব্যাকস্পেস চরটি যা আপনি ডসের জন্য পাঠ্য সম্পাদক EDIT এ ডেকে আনতে পারেন । এডিটিতে এটি তৈরি করতে ctrlP + ctrlH টিপুন । আমি এটি এখানে পেস্ট করব তবে এই ওয়েবপৃষ্ঠাটি এটি প্রদর্শন করতে পারে না। এটি নোটপ্যাডে দৃশ্যমান যদিও (এটি সাদা, বৃত্তাকার মাঝে একটি ছোট কালো আয়তক্ষেত্রের মতো)

সুতরাং আপনি এটি লিখুন:

<nul set /p=.9    Hello everyone

বিন্দুটি কোনও চর হতে পারে, কেবল সেখানেই SET / P কে জানাতে হবে যে পাঠ্যটি স্পেসের আগে শুরু হয় এবং " হ্যালো " এ নয়। " 9 " ব্যাকস্পেসের চরের একটি প্রতিনিধিত্ব যা আমি এখানে প্রদর্শন করতে পারি না। আপনি এটি 9 এর পরিবর্তে রাখতে হবে এবং এটি " " মুছে ফেলবে , তার পরে আপনি এটি পাবেন:

    Hello Everyone

পরিবর্তে:

Hello Everyone

আমি আসা করি এটা সাহায্য করবে


2
আমি বলতে ভুলে গেছি, এটি উইন্ডোজ 7 এ কাজ করে এটি কোনও কমান্ড লাইনে কাজ করবে না, কেবল একটি ব্যাচে। কারও চর না পেয়ে, এই উদাহরণটি ডাউনলোড করুন: pecm.com.sapo.pt/SET_with_backspace_char.txt
পেড্রো

ইকোর
পক্ষেও

... সুতরাং, বেশ জঘন্য অনুসন্ধান করার পরে আমি নেট এ আর পাই নি। এটি সম্ভবত একসময় আমি কিছু আবিষ্কার করেছি এবং বোবা ভাগ্য দ্বারা umb যারা আপনাকে জানেন না তাদের জন্য আপনি যদি নিয়ন্ত্রণের অক্ষর লিখতে পারেন তবে আপনি যদি নিজের সিএমডি প্রম্পটটি উত্তরাধিকার মোডে রাখেন এবং সঠিক ফন্ট ব্যবহার করেন। ... তবে আপনি যদি কেবল কোনও ফাইলে পুনর্নির্দেশ করেন বা> কন এটি কাজ করে। সিরিয়াসলি। আপনার কমান্ড প্রম্পটে একেবারে আটকে দিন: "প্রতিধ্বনি ○○ c◙◙ ○○ হরহর !! ◙ ○○ ------------- ◙◙ ○○ আমি সবচেয়ে খারাপ!?: '(○ ♪ ! ○ নাঃ • ♪ ○ আমি মহান Hazzah le-গলি মনে ◙◙ ○ আমি programmeer আমার কথা শুনতে থাকি ... something.◙> বিরূদ্ধে "!।
ব্রেন্ট Rittenhouse

ঠিক আছে, আমি আশা করি এটি আমি অন্য কারও সামনে খুঁজে পেয়েছি তবে ... এটি ইউনিকোড কোড পৃষ্ঠাতে না থাকার উপর নির্ভর করে। আপনি প্রারম্ভিকটিকে একটি ভেরিয়েবল do chcp 437 এ সঞ্চয় করতে পারেন, সেটটি কোনও ভেরিয়েবলের মধ্যে সেট করতে পারেন, বা এটি আউটপুট দিতে পারেন এবং তারপরে ফিরে স্যুইচ করতে পারেন (এবং এটি এখনও আউটপুট হওয়া উচিত)। আমি এখনও এটি সঙ্গে চারপাশে খেলছি।
ব্রেন্ট রিতেনহাউস

এছাড়াও, anyone সি স্ক্রিনটি সাফ করে কেন কারও কি ধারণা আছে ?! নেটের কোথাও এর উদাহরণ খুঁজে পাচ্ছি না। এটি সুনির্দিষ্টভাবে সেই সংমিশ্রণ, যদিও আপনি দুটি চরিত্রের মধ্যেও হোয়াইটস্পেস রাখতে সক্ষম হবেন বলে মনে হয়। অন্য কোনও চরিত্রের জন্য এটি ঠিক মনে হচ্ছে .. প্রথম চরিত্রটি সরিয়ে দিন। আমি এটি পাই না ...
ব্রেন্ট রাইটেনহাউস

7

আপনি gnuwin32 (থেকে "TR" ব্যবহার সম্পর্কে newline অপসারণ করতে পারেন coreutils প্যাকেজ)

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

যাইহোক, আপনি যদি প্রচুর স্ক্রিপ্টিং করেন তবে gnuwin32 হ'ল সোনার মাইন।


আমি গিট ব্যাশ ইনস্টল করার পরামর্শ দিই । নিশ্চিত যে এটি gnuwin32 এর মতো নয় (এবং এটি সোনার মাইন তাই +1), এটি একটি দুর্দান্ত সেটআপ এবং স্টার্ট মেনু বোতাম সহ প্রায় সর্বত্র আপনার ডান মাউস বোতামে গিট-ব্যাশ রয়েছে।
হ্যাক্রে

আপনি কি কেবলমাত্র শেষ স্থানের অক্ষরটি সরিয়ে ফেলতে ট্র ব্যবহার করতে পারেন trim?
প্যানি

ছাঁটাইয়ের জন্য
সেড ব্যবহার করুন: সেড

@ স্প্যানি - আমি ট্রিম নামে একটি পিক্সিক্স / লিনাক্স ব্যবহার করতে পারি না। এছাড়াও, \r, \nবা \r\n(OSX এ, Posix এবং Windows যথাক্রমে নতুন লাইন) "স্থান" অক্ষর নয়।
ব্যবহারকারী 66001

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 এর% এর না একটি newline অক্ষর : এটা বিস্তৃতি করার &echo.তাই শেষ আপনি একটি নতুন দৌড়াচ্ছে echoকমান্ড প্রত্যেক সময়, অত সম্পর্কে newline। আপনি এটি পরীক্ষা করে দেখতে পারেন echo "%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 (কনসোল রাইটিং) ইউটিলিটি

যদি আপনি এটি অফ-দ্য বাক্স, অফ-দ্য-শেल्फ না খুঁজে পান তবে আপনি ডিআইওয়াই করতে পারেন। এর সাথেcw ইউটিলিটি দিয়ে আপনি প্রতিটি ধরণের অক্ষর ব্যবহার করতে পারেন। কমপক্ষে, আমি এটি ভাবতে চাই। দয়া করে এটিকে চাপ দিন এবং আমাকে জানান।

সরঞ্জামসমূহ

আপনার সমস্ত প্রয়োজন। নেট ইনস্টল করা যা আজকাল খুব সাধারণ।

উপকরণ

কিছু অক্ষর টাইপ / অনুলিপি-আটকানো হয়েছে।

ধাপ

  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

বিকল্পভাবে, আপনি এই কোডটি যে কোনও ব্যাচে সাবরুটিন হিসাবে sertোকাতে .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

@Arnep এর ধারণার বাইরে আমি একটি ফাংশন করেছি:

প্রতিধ্বনি | সেট / পি = "হ্যালো ওয়ার্ল্ড"

এটা এখানে:

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

এটির সাথে এটি ব্যবহার করুন call :SL "Hello There"
আমি জানি এটি বিশেষ কিছু নয় তবে এটি ভাবতে আমার এত বেশি সময় লেগেছিল আমি অনুভব করেছি যে আমি এটি এখানে পোস্ট করব।


1

নমুনা 1: এটি কাজ করে এবং প্রস্থান কোড = 0 উত্পাদন করে That এটি ভাল। "নোট করুন।" প্রতিধ্বনির পরে সরাসরি

সি: \ ব্যবহারকারী \ phife.dog \ gitrepos \ 1 \ repo_abc \ স্ক্রিপ্টগুলি #
@echo | সেট / পি JUNK_VAR = এটি লিনাক্স ইকো-এন এর মতো প্রদর্শিত একটি বার্তা ... এবং প্রতিধ্বনি% ERRORLEVEL%

এটি লিনাক্স ইকো-এন এর মতো প্রদর্শিত একটি বার্তা ... 0

নমুনা 2: এটি কাজ করে তবে প্রস্থান কোড = ১ উত্পাদন করে That এটি খারাপ। প্রতিধ্বনির পরে দয়া করে "।" এর অভাবটি নোট করুন। যে পার্থক্য প্রদর্শিত হবে।

সি: \ ব্যবহারকারীগণ ife phife.dog \ gitrepos \ 1 \ repo_abc \ স্ক্রিপ্টগুলি #
@echo | সেট / পি 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
এটা তোলে নেই যদি এটি লুপ অগ্রগতি সূচক এর ব্যাপার।
গ্রেগসেইথ

3
আপনি কখনই এটি আপনার প্রশ্নে উল্লেখ করেননি বা আপনার প্রশ্নের যে কোনও জায়গায় এই আচরণের জন্য অনুরোধ করেছেন।
m0skit0

0

আপনি 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

এইভাবে আপনি কোনও নতুন লাইন ছাড়াই যে কোনও কিছু মুদ্রণ করতে পারবেন। আমি অক্ষরগুলি একে একে মুদ্রণের জন্য প্রোগ্রাম তৈরি করেছি, তবে আপনি লুপ পরিবর্তন করে অক্ষরের পরিবর্তে শব্দ ব্যবহার করতে পারেন।

উপরের উদাহরণে আমি "সক্ষমডেলাএডিপস্পেশন" ব্যবহার করেছি যাতে সেট / পি কমান্ডটি "স্বীকৃতি দেয় না!" অক্ষর এবং পরিবর্তে একটি বিন্দু মুদ্রণ। আমি আশা করি আপনার উদ্দীপনা চিহ্নটি ব্যবহার করবেন না "!" ;)


-1

এখানে দেরীতে উত্তর, তবে যার জন্য ডাবেনহ্যামের উত্তরটি প্রায় 80 টি লাইন দীর্ঘ এবং যার স্ক্রিপ্টগুলি সম্ভবত ব্যবহারের সীমাবদ্ধতার অধীনে (সম্ভবত ব্যবহারকারী-ইনপুটগুলির কারণে) ভেঙে যেতে পারে এমন একক লাইনে বিশেষ অক্ষর লিখতে হবে set /p, আপনার .bat বা .Cmd কে একটি সংকলিত সি ++ বা সি-ভাষা এক্সিকিউটেবল এবং তারপরে কেবল coutবা printfঅক্ষরগুলির সাথে যুক্ত করা সম্ভবত সবচেয়ে সহজ । এটি ওপিতে যেমনটি ছিল ঠিক তেমনভাবে আপনি যদি এক ধরণের অগ্রগতি বার বা অক্ষর ব্যবহার করে কিছু দেখান তবে সহজেই এক লাইনে একাধিকবার লেখার অনুমতি দেয়।


আপনি কি নিশ্চিত? printfএকটি উইন -7 cmdফলকটি থেকে আমাকে দেয়"'printf' is not recognized as an internal or external command, operable program or batch file."
আইং

printfউইন্ডোজ নেটিভ হয় না। এটি একটি উইন্ডোজ প্রশ্ন।
kayleeFrye_onDeck

1
@ কায়লিফ্রি_ডোনেক আমি ধরে নিয়েছি আপনার মন্তব্য জিগগুনজারে পরিচালিত হয়েছে , আমাকে নয়; আমি আমার প্রশ্নে পরামর্শ দিচ্ছি যে ফর্ম্যাটিং গুরুত্বপূর্ণ এমন ক্ষেত্রে শেল কমান্ডের জন্য সি এবং সি ++ মোটামুটি প্ল্যাটফর্ম-স্বতন্ত্র বিকল্প হিসাবে ব্যবহৃত হতে পারে।
সেলডমনিডি

1
আমাকে ক্ষমা করুন বাবা, কারণ আমি লাঞ্ছিত হয়েছি।
কায়লিফ্রি_অনডেক

তবে তারপরে শেলের ইনপুটটি সঠিকভাবে বিশ্লেষণ করা দরকার। উদাহরণস্বরূপ, এই জাতীয় প্রোগ্রাম কীভাবে একটি উদ্ধৃতি চিহ্ন মুদ্রণ করবে?
অ্যালেক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.