File 批处理文件:从.tsv文件中删除回车符
我正在尝试使用批处理文件从.tsv文件中删除回车符。 这就是我的.tsv文件的外观,第一行是一列 手动添加这些行中显示的***[CR]和[LF],以获得想法File 批处理文件:从.tsv文件中删除回车符,file,batch-file,File,Batch File,我正在尝试使用批处理文件从.tsv文件中删除回车符。 这就是我的.tsv文件的外观,第一行是一列 手动添加这些行中显示的***[CR]和[LF],以获得想法 Class Name & Address Item lbs Value Pickup/Drop off Date: 23 Sep[CR][LF] Class1 Ben Coha[CR] 2305 E LA st[CR] VISIA, PA[CR] 932112-4422 Health and bea
Class Name & Address Item lbs Value Pickup/Drop off Date: 23 Sep[CR][LF]
Class1 Ben Coha[CR]
2305 E LA st[CR]
VISIA, PA[CR]
932112-4422 Health and beauty product / cologne body wear for men 0.13 19[CR][LF]
Class2 mich marce[CR]
255 rid court[CR]
prince frick, PA[CR]
20442 health and beauty product / cologne body wear for women 1.5 47
我希望此文件如下所示[我使用记事本删除了[CR]中出现的('replace'为nothing)]
Class Name & Address Item lbs Value Pickup/Drop off Date: 23 Sep[LF]
Class1 Ben Coha 2305 E LA st VISIA, PA 932112-4422 Health and beauty product / cologne body wear for men 0.13 19[LF]
Class2 mic marce 255 rid court prince frick, PA 20442 health and beauty product / cologne body wear for women 1.5 47
我尝试了以下批处理文件。文件被放在一行中。它删除了回车和换行
@echo off
SetLocal DisableDelayedExpansion
for /f "delims=" %%a in (myFile.tsv) do (
echo/|set /p ="%%a%"
)>>newMyFile.tsv
结果看起来像
Class Name & Address Item lbs Value Pickup/Drop off Date: 23 SepClass1 Ben Coha 2305 E LA st VISIA, PA 932112-4422 Health and beauty product / cologne body wear for men 0.13 19 Class2 mic marce 255 rid court prince frick, PA 20442 health and beauty product / cologne body wear for women 1.5 47
我想修改.bat文件,使其只删除\r\n而不是同时删除\r\n
更新:不知何故,我能够添加图像,这将提供更清晰的想法。
类似的.tsv文件
希望它是这样的吗
第一行空无一人,你能活下去吗
@echo off
SetLocal EnableDelayedExpansion
(
for /f "delims=" %%a in (myFile.tsv) do (
set "line=%%a"
if "!line:~0,1!" neq " " (
echo(!newline!
set "newline=!line!"
) else (
set "newline=!newline!!line!"
)
)
echo(!newline!
)>newMyFile.tsv
如果您使用 如果使用
/o-
,则可以覆盖原始文件
如果将命令放入批处理脚本中,则必须使用调用JREPL
下面是我最初的答案,我认为源文件中每行末尾都有CR/LF(在编辑问题之前)。 我讨厌批量编辑文本文件,因为它需要很多神秘的知识,有很多限制,而且结果很慢。然而,用批处理解决这个问题是可能的,我决定我可以使用实践:-)
如果每个输入行都是的话,那么下面的工作可能会对您有用,它只是将所有
CR
替换为零
setlocal DisableDelayedExpansion
for /F "usebackq" %%C in (`copy /Z "%~dpf0" nul`) DO (
for /F "delims=" %%L in (myFile.tsv) do (
set "line=%%L"
if defined line (
setlocal EnableDelayedExpansion
echo(!line:%%C=!
endlocal
) ELSE echo(
)
)
endlocal
为此,您必须使用vbscript/powershell(它仍然可以嵌入到批处理文件中)。例如,使用将
vbCr
替换为”
,然后将”+vbLf
替换为vbCrLf
。记录是否正确?记录1在开始处有一个空格,记录2没有空格。你能再提供一些记录吗,或者确认记录不一定从第1列开始吗?这是发帖时的一个打字错误,记录1没有空间。我更正了。啊:-)现在一切都清楚了,你将[CR]和[LF]合并到了列出的文件中。为我的错误沟通道歉,我想问题现在更清楚了。它删除了文件的第一行\r和\n在文件中保持不变。空的第一行很容易消除:if defined newline echo(!newline!
如果文件包含!
,则此脚本将失败。它从文件中删除了CR,但将其替换为LF as…。对于第一行,它将CR LF替换为LF---对于其他记录行(从第二行开始)也可以,它将CR替换为LF——这里我们只想删除CR(替换为nothing)@Vik-我使用您问题中提供的示例输入进行了测试,它生成了请求的输出,每行末尾只有LF。因此,我不知道您还期望什么?!也许您应该编辑您的问题,以指示CR和LF在源文件中的位置(使用\r
和\n
)。抱歉造成混淆,我试图在发布问题时附加从notepad++显示的CR和LF屏幕截图,但它说我没有足够的信誉点。我将编辑我的问题以显示LF/CR。再次抱歉混淆。+1,但为什么不将setlocal disableDelayedExpansion
移出循环所以你只需要在循环中切换一次?@dbenham它只切换一次,因为它在外循环中,但你仍然是对的,移动它对可见性更好
@echo off
setlocal enableDelayedExpansion
set "input=test.txt"
set "output=out.txt"
:: Define LF to contain a linefeed character
set ^"LF=^
^" The empty line above is critical - DO NOT REMOVE
:: Determine how many sets of 4 lines must be read
for /f %%N in ('find /c /v "" ^<"test.txt"') do set /a cnt=%%N/4
<"!input!" >"!output!" (
%= Read and write the first line =%
set "ln="
set /p "ln="
<nul set /p "=!ln!!LF!"
%= Outer loop iterates the 4 line sets =%
for /l %%N in (1 1 !cnt!) do (
%= Initialize out line to empty =%
set "out="
%= Inner loop appends next 4 lines into out =%
for /l %%n in (1 1 4) do (
set "ln="
set /p "ln="
set "out=!out!!ln!"
)
%= Write the line =%
<nul set /p "=!out!!LF!"
)
)
setlocal DisableDelayedExpansion
for /F "usebackq" %%C in (`copy /Z "%~dpf0" nul`) DO (
for /F "delims=" %%L in (myFile.tsv) do (
set "line=%%L"
if defined line (
setlocal EnableDelayedExpansion
echo(!line:%%C=!
endlocal
) ELSE echo(
)
)
endlocal