使用.BAT文件删除.CSV的字段和记录[已关闭]

plicqrtu  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(207)

已关闭,此问题需要更focused,目前不接受回答。
**要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

4天前关闭。
Improve this question
首先,我遇到了一些不同的帖子与这种类型的问题有关,但这些解决方案都没有真正解决我的问题。
我无法更改系统导出所需.CSV文件的方式。
如果可能的话,我想运行一个.bat文件,纠正每个.csv文件在一个特定的目录,并保存一个新的文件与existingname_new.csv
1)CSV的每个记录的前9个字段为空。“A到I”(希望将这些字段删除)。我们文件中的数据以“J”开头,我们需要它为“A”

样本记录:(数据已因保密原因更改)

,,,,,,,,,"0000012345",1/1/2021,"000023456","Metal Machine Vendor A",,"1,000.00",,,,,,,,,,,,,,,,,
,,,,,,,,,"JKL",1/1/2021,"000023457","Metal Machine Vendor B",,"1,000.00",,,,,,,,,,,,,,,,
,,,,,,,,,"INTR",1/1/2021,"000023458","Metal Machine Vendor C",,"1,000.00",,,,,,,,,,,,,,,,

2)删除上述样本记录中包含“JKL”或“INTR”的任何记录,“J”列包含数字“0000012345”、“JKL”或“INTR”
link上述解决方案将特定字段复制到新文件中,但当尝试使用两位数(如%10,%11,%12)时,它不会重新识别两位数“%10”,它会看到“%1”并将O添加到数据中。
该解决方案也不会根据需要删除JKL或INTR行。
任何帮助将不胜感激。

,,,,,,,,,12364,1/1/2023,30288,account name,,"1,000.00"
,,,,,,,,,12365,1/1/2023,30308,account name,,"1,000.00"
,,,,,,,,,12366,1/1/2023,30441,account name,,"1,000.00"
,,,,,,,,,12367,1/1/2023,30472,account name,,"1,000.00"
,,,,,,,,,12368,1/1/2023,30490,account name,,"1,000.00"
,,,,,,,,,12369,1/1/2023,31021,account name,,"1,000.00"
,,,,,,,,,ACH,1/1/2023,30070,account name,,"1,000.00"
,,,,,,,,,ACH,1/1/2023,30602,account name,,"1,000.00"
,,,,,,,,,ACH,1/1/2023,30092,account name,,"1,000.00"
,,,,,,,,,ACH,1/1/2023,31010,account name,,"1,000.00"
,,,,,,,,,WIRE,1/1/2023,30498,account name,,"1,000.00"
,,,,,,,,,WIRE,1/1/2023,31043,account name,,"1,000.00"
,,,,,,,,,WIRE,1/1/2023,30954,account name,,"1,000.00"

这段代码就是我现在使用的,它遍历了“E:\batch csv test”目录下的每个文件,创建了一个新文件,文件名为“existingname_New.csv)”

For %%F in (*.csv) do ( 
    (for /f "tokens=* delims=," %%a in ('findstr /rv ""ACH" "WIRE"" %%F') do @echo %%a)>"E:\batch csv test\%%~nF_New.csv"
)
gzjq41n4

gzjq41n41#

for将连续的分隔符视为一个,因此很容易删除前导空行。我不会把删除行的负担放在for循环中,因为它很容易预先过滤行:

(for /f "tokens=* delims=," %%a in ('findstr /rv "\"JKL\" \"INT.*\"" existingname.csv') do @echo %%a)>existingname_new.csv

输出示例数据:

"0000012345",1/1/2021,"000023456","Metal Machine Vendor A",,"1,000.00",,,,,,,,,,,,,,,,,

目前还不清楚您是要删除“任何包含INT的行”还是“任何包含INTR的行”。如果是第二个,请将\"INT.*\"替换为\"INTR\"\"是转义引号,用于告诉findstr搜索文字引号)

相关问题