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

时间:2018-06-21 17:33:39

标签: batch-file for-loop findstr

使用批处理文件,我需要遍历文件夹中所有由管道分隔的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.

不过,我不确定语法的哪一部分不正确。我尝试更改第二行@findstr的末尾以尝试以不同方式输出文件,但是到目前为止,无论我做什么,我总是收到“拒绝访问...”消息。

1 个答案:

答案 0 :(得分:0)

您能不能做像这样粗野的事情?

@Echo Off
Set "dirSrc=D:\A Folder\A Sub Folder\Testing Folder"
CD /D "%dirSrc%" 2>Nul || Exit /B
For %%A In ("*.csv") Do Findstr "[^-|]" "%%A">"%%~nA.$csv$" && Del /A /F "%%A"
Ren "*.$csv$" "*.csv"