如何删除我的行

时间:2016-02-02 22:56:41

标签: windows batch-file cmd

我来寻求帮助。 我有一个自动创建的文档。这是SQL查询的结果。

换行符的示例。用词我们看到了

"2K45.10 NEW";"ARC CA 125 CONTROL";"4";"0";"8 640";
"2K45.23 NEW";"ARC CA 125 REAGENT 400 TESTS ";"4";"0";"103 777"
"2K45.28 NEW";"ARC CA 125 REAGENT 100 TEST ";"4";"0";"27 113"
"2K46.01";"ARC ANTI TG CALIBRATOR ";"4";"0";"11 626"
"2K46.10";"ARC ANTI TG CONTROL";"4";"0";"8 483"
"2K46.25";"ARC ANTI TG RGT 100 TEST ";"4";"0";"26 872"

如果我打开Nopad ++

"2K45.10 NEW";"ARC CA 125 CONTROL";"4";"0";"8 640";"BOITE";"";"TAXE 39% CD 38220000000"
"2K45.23 NEW";"ARC CA 125 REAGENT 400 TESTS 
";"4";"0";"103 777"
"2K45.28 NEW";"ARC CA 125 REAGENT 100 TEST 
";"4";"0";"27 113"
"2K46.01";"ARC ANTI TG CALIBRATOR 
";"4";"0";"11 626"
"2K46.10";"ARC ANTI TG CONTROL";"4";"0";"8 483"
"2K46.25";"ARC ANTI TG RGT 100 TEST 
";"4";"0";"26 872"

问题在于,在某些行中,有行换行,当我运行我的脚本时,在那里或那里的换行我切断了我的行。下面是我使用的脚本。

@echo off & cls

Set "$c=1"
setlocal enabledelayedexpansion

(for /f "delims=" %%a in (input.txt) do (
  if !$c!==1 (
    set $l=%%a
    set /a $c+=1
    ) else (
    echo !$l!%%a
    set "$c=1"
  )
))>sortie.txt

结果是

"2K45.23 NEW";"ARC CA 125 REAGENT 400 TESTS ";"4";"0";"103 777" 
"2K45.28 NEW";"ARC CA 125 REAGENT 100 TEST ";"4";"0";"30 652";
"2K46.01"   ;"ARC ANTI TG CALIBRATOR ";"4";"0";"11 626"
"2K46.10"   ;"ARC ANTI TG CONTROL";"4";"0";"8 483" "2K46.25";"ARC ANTI TG RGT 100 TEST 
";"4";"0";"26 872";"2K47.01";"ARC ANTI TPO CALIBRATOR

我不明白为什么,对于没有LF的行,还有更多的CRLF

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

@ECHO Off
SETLOCAL ENABLEDELAYEDEXPANSION
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q35165390.txt"

Set "$c=1"

for /f "usebackqdelims=" %%a in ("%filename1%") do (
  if !$c!==1 (
    set $l=%%a
    set /a $c+=1
    ) else (
    echo !$l!%%a
    set "$c=1"
  )
)

ECHO ==============

Set "$c="

for /f "usebackqdelims=" %%a in ("%filename1%") do (
 IF DEFINED $c (ECHO !line!%%a&SET "$c="
 ) ELSE (
  SET "line=%%a"
  SET "line=!line:"=_#_!"
  IF "!line:~-3!"=="_#_" (echo %%a) else (set "$c=1"&SET "line=%%a")
 )
)

GOTO :eof

此批处理的第一部分是您的代码,其中包含一些小的更改,用于从名为适合我的系统的文件中读取数据。

鉴于您显示的数据为notepad++版本,运行此代码的结果为:

"2K45.10 NEW";"ARC CA 125 CONTROL";"4";"0";"8 640";"BOITE";"";"TAXE 39% CD 38220000000""2K45.23 NEW";"ARC CA 125 REAGENT 400 TESTS 
";"4";"0";"103 777""2K45.28 NEW";"ARC CA 125 REAGENT 100 TEST 
";"4";"0";"27 113""2K46.01";"ARC ANTI TG CALIBRATOR 
";"4";"0";"11 626""2K46.10";"ARC ANTI TG CONTROL";"4";"0";"8 483"
"2K46.25";"ARC ANTI TG RGT 100 TEST ";"4";"0";"26 872"
==============
"2K45.10 NEW";"ARC CA 125 CONTROL";"4";"0";"8 640";"BOITE";"";"TAXE 39% CD 38220000000"
"2K45.23 NEW";"ARC CA 125 REAGENT 400 TESTS ";"4";"0";"103 777"
"2K45.28 NEW";"ARC CA 125 REAGENT 100 TEST ";"4";"0";"27 113"
"2K46.01";"ARC ANTI TG CALIBRATOR ";"4";"0";"11 626"
"2K46.10";"ARC ANTI TG CONTROL";"4";"0";"8 483"
"2K46.25";"ARC ANTI TG RGT 100 TEST ";"4";"0";"26 872"

这意味着数据似乎包含干扰处理的字符。

请注意,您的word版本不包含"BOITE";"";"TAXE 39% CD 38220000000"

但是我的代码输出与您的代码输出不匹配(并且您的输出错过了整个...BOITE...行。)

所以 - 在某个地方我们得到wordnotepad++以不同的方式解释相同的数据。

我使用editplus,这允许我查看文件中的实际十六进制代码。也许如果您可以使用十六进制编辑器检查文件,则会显示真实的文件内容。