我有一个 csv,其列包含如下内容:
“123,456”或“1.2345”请参阅附图了解更多信息。
我想删除 csv 中所有列的所有引号。引号始终是第一个和最后一个字符。
该文件每天生成并包含许多列。我想运行一个批处理或类似的操作,以按计划每天删除所有列中的引号。我不是编码员,对批处理文件有点熟悉,所以如果可能的话更喜欢使用批处理。我添加了我正在处理的单元格内容示例的图像。
我必须使用.csv 格式。该脚本可以更新现有文件或写入新文件。
我在网上搜索并找到了 VBA 脚本,但真的想使用一个批处理,我可以将其放入调度程序中每天运行。很高兴听到替代方案,但我无法使用宏。
@ECHO OFF
SETLOCAL
rem The following settings for the directories and filenames are names
rem that I use for testing and deliberately includes spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:\your files"
SET "destdir=u:\your results"
SET "filename1=%sourcedir%\q77630104.txt"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "usebackqdelims=" %%e IN ("%filename1%") DO SET "string=%%e"&CALL :process
)>"%outfile%"
GOTO :EOF
:process
:: remove quotes
SET "string=%string:"=%"
:: remove commas
SET "string=%string:,=%"
:: replace spaces with commas
SET "string=%string: =,%"
:: And report
ECHO %string%
GOTO :eof
在应用于真实数据之前,始终验证测试目录。
请注意,如果文件名不包含空格等分隔符,则
usebackq
和 %filename1%
周围的引号都可以省略。
您需要更改分配给
sourcedir
和 destdir
的值以适合您的情况。该列表使用适合我的系统的设置。
我故意在名称中包含空格,以确保空格得到正确处理。
我使用了一个名为
q77630104.txt
的文件,其中包含一些虚拟数据用于测试。
生成定义为
%outfile%
的文件
for
行周围的括号导致子例程echo
的:process
输出被重定向到输出文件。
建议处理字符串的三个阶段。请参阅 docco 提示中的
set/?
- 或 SO 上的数千个示例。
如果您不想执行
set
中的任何:process
命令,只需将其删除即可。
针对包含以下内容的文件运行的结果
"123,456" ""1,123,456" "123456.00" "234"
是
123456,1123456,123456.00,234