Batch file 使用“批处理文件”在文件夹中的文件中查找一行,删除该行并以相同的名称保存该文件

Batch file 使用“批处理文件”在文件夹中的文件中查找一行,删除该行并以相同的名称保存该文件,batch-file,for-loop,findstr,Batch File,For Loop,Findstr,使用批处理文件,我需要遍历文件夹中所有以管道分隔的CSV,找到带有破折号和管道的行(将始终是文件中的第二行),删除该行并将同名文件保存在同一位置 虚线/管道线将根据管道之间的虚线数量以及管道中的管道数量而变化,因此该线可以如下所示: ------|-----------|---|----------------------|------ ---------------|--------|-------------------|--|----------|-----|------- 或者它可以

使用批处理文件,我需要遍历文件夹中所有以管道分隔的CSV,找到带有破折号和管道的行(将始终是文件中的第二行),删除该行并将同名文件保存在同一位置

虚线/管道线将根据管道之间的虚线数量以及管道中的管道数量而变化,因此该线可以如下所示:

------|-----------|---|----------------------|------
---------------|--------|-------------------|--|----------|-----|-------
或者它可以像这样:

------|-----------|---|----------------------|------
---------------|--------|-------------------|--|----------|-----|-------
取决于文件中的数据

我只是在学习批处理文件中的循环和findstr,但通过阅读和实验,我将以下内容结合在一起:

@echo off

set _outputfolder="D:\A Folder\A Sub Folder\Testing Folder"
echo.
echo %_outputfolder%

for %%F in (%_outputfolder%\*.csv) do (

    REM Sanity checks
    echo.
    echo path ^& file: "%%~F"
    echo.
    echo file: %%~nxF

    @findstr /r /b /c:"-*|" "%%~F"

    @findstr /r /b /c:"-*|" "%%~F" > "%_outputfolder%"\tmp.csv

    copy /y "%_outputfolder%"\tmp.csv "%%F"

)

@pause
第一个
@findstr
在每个文件中正确地回显带有破折号的行,但是对于第二个
@findstr
行的每个循环迭代,我得到以下结果:

Access is denied.
The syntax of the command is incorrect.

不过,我不确定我的语法中哪一部分是错误的。我试图更改第二行的结尾,以尝试以不同的方式输出文件,但不管我做了什么,我一直收到“访问被拒绝…”消息。

你能不能做一些像这样粗糙的事情

@Echo关闭
设置“dirSrc=D:\A文件夹\ A子文件夹\测试文件夹”
CD/D“%dirSrc%”2>Nul | |退出/B
对于(“*.csv”)中的%%A,请查找“[^-|]”“%%A”>“%%~nA.$csv$”&&Del/A/F“%%A”
Ren“*.csv$”“*.csv”

使用如下引号:
设置“\u outputfolder=D:\A Folder\A Sub Folder\Testing Folder”
,这样引号就不再是变量值的一部分;实际上,您正在将引号加倍,这使带有空格的路径在此处显示为不带引号:
“%\u outputfolder%\tmp.csv
,实际上应该是
“%\u outputfolder%\tmp.csv”
,顺便说一下……我回答了您。您还缺少一个钥匙开关。您不想输出匹配的行。您想输出不匹配的行。谢谢,Squashman。我已经修复了报价问题(谢谢@aschipfl),但是是的,你是对的。带有破折号和管道的匹配行就是写入文件的内容。我试着使用DosTips文章中的嵌套for循环,但我不知道如何做,因为你正在使用冒号之类的东西,因为你不知道我当时在搜索什么。@marky,没有使用冒号,也没有嵌套for命令。这是PenPen的代码。您应该考虑以不同的方式执行SqLCMD,而不是输出DASH。有办法解决这个问题。这里有很多关于StackOverFlow的答案可以解决这个问题。我喜欢使用反向字符类。