我在windows cmd.exe (至less是XP)中有一个很好的技巧来模拟UNIX echo的行为,而不用换行符echo -n 。 例如,命令:
<nul: set /p junk= xyzzy
会导致正好输出六个字符,前导空格和string“xyzzy”,而不是别的。
如果你对这个原因感兴趣,它实际上是一个input命令,在提示符输出到junk环境variables之前,输出" xyzzy"作为提示,然后等待用户input。 在这种特殊情况下,它不会等待用户input,因为它抓取了来自nul设备的input。
当(例如)在循环中处理文件(每个文件一次迭代),并且每行列出多个文件时,它在cmd脚本中非常有用。 通过使用这个技巧,您可以简单地输出每个文件名,然后input一个空格,然后在循环之后输出一个换行符:
我的batch file(.cmd)有时会执行部分行
如何在windows 8中使用cmd杀死进程名称的程序?
如何在windows上设置PhoneGap
删除包含大量文件的文件夹,并显示正在删除的文件
我如何让我的windows7符号链接从命令行执行?
Processing files: file1.txt file42.txt p0rn.zip
现在我发现,在windows 7下,空间不再输出,所以我得到的是:
Processing files: file1.txtfile42.txtp0rn.zip
有没有一种方法可以让set /p再次开始Expression我的空间,或者在Win7中有另外一种方法来达到同样的效果吗?
我试过引用,使用. (在echo ),甚至用^逃避string,但没有一个似乎工作:
C:pax> <nul: set /p junk= xyzzy xyzzy C:pax> <nul: set /p junk=" xyzzy" xyzzy C:pax> <nul: set /p junk=' xyzzy' ' xyzzy' C:pax> <nul: set /p junk=. xyzzy . xyzzy C:pax> <nul: set /p junk=^ xyzzy xyzzy
我需要的是:
C:pax> some_magical_command_with_an_argument xyzzy xyzzy
这将在开始时给我空间, 并在结束时不会换行。
删除子目录中的所有文件除了给定的扩展名(在windows BATCH中)
连接到variables的path列表 – 传递给CMD批处理脚本中的“java -classpath …”
从文本文件中读取一个variables
cmd编程中的速度和时间问题
自动有脚本input是在windows CMD是/否提示
这与paxdiablo的答案非常相似,除了我使用混合Jscript /批处理文件而不是临时VBScript文件。
我的脚本被称为jEval.bat – 它只是评估任何有效的Jscript表达式,并将结果写入标准输出,可选jEval.bat有换行符。 愚蠢的小脚本是非常有用的批处理编程。
假设jEval.bat不是在你的当前文件夹中,就是在PATH中的某个地方,那么你可以简单地做一些事情:
call jeval "' xyzzy'"
这是脚本。 这真的很简单。 大部分代码与文档,错误处理和内置的帮助系统有关。
@if (@X)==(@Y) @end /* harmless hybrID line that begins a Jscrpt comment ::************ documentation *********** ::: :::jEval JscriptExpression [/N] :::jEval /? ::: ::: Evaluates a Jscript Expression and writes the result to stdout. ::: ::: A newline (CR/LF) is not appended to the result unless the /N ::: option is used. ::: ::: The Jscript Expression should be enclosed in double quotes. ::: ::: Jscript string literals within the Expression should be enclosed ::: in single quotes. ::: ::: Example: ::: ::: call jEval "'5/4 = ' + 5/4" ::: ::: Output: ::: ::: 5/4 = 1.25 ::: ::************ Batch portion *********** @echo off if "%~1" equ "" ( call :err "InsufficIEnt arguments" exit /b ) if "%~2" neq "" if /i "%~2" neq "/N" ( call :err "InvalID option" exit /b ) if "%~1" equ "/?" ( setlocal enableDelayedExpansion for /f "delims=" %%A in ('findstr "^:::" "%~f0"') do ( set "ln=%%A" echo(!ln:~3! ) exit /b ) cscript //E:Jscript //nologo "%~f0" %* exit /b :err >&2 echo ERROR: %~1. Use jeval /? to get help. exit /b 1 ************ Jscript portion ***********/ if (WScript.Arguments.named.Exists("n")) { WScript.StdOut.Writeline(eval(WScript.Arguments.Unnamed(0))); } else { WScript.StdOut.Write(eval(WScript.Arguments.Unnamed(0))); }
这不是使用set或其他cmd -internal的东西,但你可以使用cscript (也包括在标准的windows安装)来做类似的事情。 你甚至可以通过使用创建临时的vbs文件来从cmd文件本身控制它(没有单独的文件来维护)。
将此代码放置在您的cmd文件中:
rem Create the VBS file to output spaces and a word. echo.for i = 1 to WScript.Arguments.Item(0) >spacetext.vbs echo. WScript.StdOut.Write ^" ^" >>spacetext.vbs echo.next >>spacetext.vbs echo.WScript.StdOut.Write WScript.Arguments.Item(1) >>spacetext.vbs rem Do this once per word you want output (eg,in a loop). cscript /nologo spacetext.vbs 0 Hello,cscript /nologo spacetext.vbs 1 my cscript /nologo spacetext.vbs 1 name cscript /nologo spacetext.vbs 1 is cscript /nologo spacetext.vbs 4 pax. rem Do this at the end to add newline and kill temp file. echo. del spacetext.vbs
这是你期望的结果:
Hello,my name is pax.
你是这个意思吗?
@ECHO OFF SETLOCAL FOR /l %%i IN (1,1,4) DO <Nul SET /p var="item %%i "
结果:
项目1项目2项目3项目4
还是你一开始就坚持要一个空间?
好的,现在有正确的答案:你不能在Win7中拥有领先的<space>和set /p 。 windows版本之间有区别:
Syntax | XP | Vista and windows 7 ----------------------+-------------------------------------+------------------------------------- <nul set /p =!msg! |- If 1st char is quote,then trims |- Trims leading white space chars. or | that quote,and if at least one |- If 1st non white space char is <nul set /p "=!msg!" | additional quote,than trims last | quote,then that quote is treated | quote and all remaining chars. | as white space and trimmed,and if |- If 1st non trimmed char is =,then | at least one additional quote,then | Syntax error. | trims last quote and all remaining | | chars. | |- If 1st non trimmed char is =,then | | Syntax error. ----------------------+-------------------------------------+------------------------------------- <nul set /p ="!msg!" |- Trims leading control chars and |- Trims leading white space chars. or | spaces. |- If 1st non trimmed char is =,then <nul set /p "="!msg!""|- If 1st non trimmed char is =,then | Syntax error. | Syntax error. | ----------------------+-------------------------------------+------------------------------------- On Vista and windows 7,the trimmed leading white space chars are: 9 0x09 Horizontal Tab 10 0x0A New line 11 0x0B Vertical Tab 12 0x0C Form Feed 13 0x0D Carriage Return 32 0x20 Space 255 0xFF Non-breaking Space
资源
对于其他技术来获得纯批次的领先空间,请参阅此处
总结以上是内存溢出为你收集整理的相当于Windows的“echo -n”不再适用于Win7全部内容,希望文章能够帮你解决相当于Windows的“echo -n”不再适用于Win7所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)