相当于“echo -n”的Windows不再适用于Win7
我在
Windows cmd.exe(至少高达XP)中有一个漂亮的技巧来模拟UNIX echo的行为而没有换行符echo -n.例如,命令:
<nul: set /p junk= xyzzy 将导致正好六个字符输出,前导空格和字符串“xyzzy”,没有别的.
在(例如)处理循环中的文件(每个文件一次迭代)时,它在cmd脚本中非常有用,您希望每行列出多个文件.通过使用这个技巧,您可以简单地输出每个文件名后跟一个空格而不是换行符,然后在循环之后输出换行符来完成: Processing files: file1.txt file42.txt p0rn.zip 现在我发现,在Windows 7下,空格不再输出,所以我得到的是: Processing files: file1.txtfile42.txtp0rn.zip 有没有办法我可以设置/ p再次开始尊重我的空间,或者在Win7中有另一种方式来达到同样的效果吗? 我试过引用,使用. (在echo中工作)甚至用^转义字符串,但它们似乎都不起作用: 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 这将在开始时给我空间,最后没有新行. 解决方法
这与paxdiablo的答案非常相似,除了我使用混合JScript /批处理文件而不是临时VBScript文件.
我的脚本名为jEval.bat – 它只是评估任何有效的JScript表达式,并将结果写入stdout,可选择使用尾随换行符.这个愚蠢的小脚本对于批量编程非常有用. 假设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))); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-7 – Windows多点触控事件和LabView
- windows-server-2008-r2 – 在server 2008 r2中打开网络共享
- Windows程序集怀疑 – x86
- windows-server-2008 – 我可以在没有安装远程桌面服务的情
- windows-server-2003 – Windows 2003 heartbleed bug open
- Microsoft C语言参考
- 无法从Windows Mono C#Project访问Linux gcc编译的.so共享库
- 如何从’call’ed例程中终止Windows批处理文件?
- 使用DHCP设置Windows服务器主机名
- windows-server-2008 – 增加Kerberos票证的MaxTokenSize的