首先,我遇到了一些与这类问题相关的不同帖子,但这些解决方案都没有真正解决我的问题。
我无法更改我的系统如何导出所需的。csv文件。
如果可能的话,我想运行一个。bat文件,纠正特定目录中的每个。csv文件,并保存一个新的文件existingname_new.csv
1) . csv的每条记录前9个字段为空。"A到i";(希望这些能被移除。)文件中的数据以" "开头,我们需要它是"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"
链接上面的解决方案将特定字段复制到新文件中,但当尝试使用双位数(如%10,%11,%12)时它不能识别双位数"%10"它看到"%1"并将0加到数据中。
此解决方案也不会在需要时删除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"
)
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
搜索字面引号)