Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 批处理文件:从.tsv文件中删除回车符_File_Batch File - Fatal编程技术网

File 批处理文件:从.tsv文件中删除回车符

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

我正在尝试使用批处理文件从.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 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