说我有以下批处理脚本:
For ... DO (
SET VAL=%%B
IF defined VAL echo %%A=%%B >> %OUTPUT_FILEPATH%
)
如何使用Unix(只是换行)行结尾输出echo
?
或者,我可以按原样编写文件,然后从批处理脚本转换它吗? (某种查找/ r / n并用/ n替换?如果是这样,我该怎么做?)
我想要一个独立的解决方案(即不涉及下载额外实用程序的解决方案,可以在批处理脚本本身[Windows 7]中完成)。
答案 0 :(得分:3)
执行此转换的合适方法不是通过批处理文件,而是使用其他编程语言,如JScript;这样,转换过程快速可靠。但是,您不需要数百行程序就可以实现像这一样简单的替换。下面的两行批处理文件执行此转换:
@set @a=0 /* & cscript //nologo //E:JScript "%~F0" < input.txt > output.txt & goto :EOF */
WScript.Stdout.Write(WScript.Stdin.ReadAll().replace(/\r\n/g,"\n"));
编辑:我添加了对原始代码的修改,允许以标准方式在批处理部分中包含更多命令。
@set @a=0 /*
@echo off
set "OUTPUT_FILEPATH=C:\Path\Of\The\File.txt"
cscript //nologo //E:JScript "%~F0" < "%OUTPUT_FILEPATH%" > output.txt
move /Y output.txt "%OUTPUT_FILEPATH%"
goto :EOF */
WScript.Stdout.Write(WScript.Stdin.ReadAll().replace(/\r\n/g,"\n"));
第一行是隐藏JScript代码中cscript
命令的技巧,因此编译此混合 .BAT文件不会发出错误。
在JScript代码中:WScript.Stdin.ReadAll()
读取整个重定向的输入文件;如果文件 large ,这可能会导致问题。 replace
方法使用正则表达式来标识要替换的文本,并将第二个字符串放在其位置;您可以在this link阅读有关此主题的进一步说明。 WScript.Stdout.Write
只取出替换的输出并将其发送到屏幕。简单!不是吗?的 ;-)
强>
答案 1 :(得分:2)
如果可以使用PowerShell,则可以生成这样的Unix换行符:
PowerShell -Command Write-Host
您可以将其与SET / P技巧结合使用以输出不带换行符的文本并手动添加换行符。例如:
( ECHO | SET /P="Hello World!" & PowerShell -Command Write-Host ) > output.txt
此后,output.txt
将包含文本Hello World!并附加一个0x0a字符。
答案 2 :(得分:1)
取自 Macros with parameters appended :
格式化很棘手,但请尝试
set ^"LF=^
^" Don't remove previous line & rem line feed (newline)
set ^"\n=^^^%LF%%LF%^%LF%%LF%^^"& rem Define newline with line continuation
For ... DO (
SET VAL=%%B
IF defined VAL <nul set/P^=%%A=%%B%\n%>> %OUTPUT_FILEPATH%
)
或者,为了避免第一行之后的前导空格:
<nul set/P^=%%A=%%B%\n%^>> %OUTPUT_FILEPATH%