使用批处理文件,我需要遍历文件夹中所有由管道分隔的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
的末尾以尝试以不同方式输出文件,但是到目前为止,无论我做什么,我总是收到“拒绝访问...”消息。
答案 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"