【发布时间】:2014-03-06 05:42:20
【问题描述】:
我有一个过程,其中传入的文件是 csv,并且在最后一个条目之后有尾随逗号。
我需要处理这个并在没有最后一个逗号的情况下将其发送出去,因为它会导致虚拟“空列”的验证错误
目前我有这段代码可以将每一行写入一个新文件:
for /f "tokens=* delims=" %%x in (file.csv) do echo %%i >> test.txt
我一直在尝试使用 echo %string:~0,-1% 之类的东西来删除尾随逗号,但我运气不佳。我不认为 %%i 可以像上面引用的字符串一样使用。我尝试将 %%i 写入字符串,但似乎我的语法也有误。
[编辑]
我确实通过 vbs 脚本运行文件以用管道 (, = |) 替换逗号,因此,如果在该过程中有更简单的方法可以做到这一点,在我搜索 stackoverflow 以尝试解决此问题之前问我发现这行我认为可能会有所帮助:
strNewText = strNewText.Substring(0,strNewText.Length-1)
strNewText 是保存更新数据的变量,但不起作用,现在查找和替换文本部分在我添加时实际上并没有运行:
rem CREATE Find And Replace Text VBS SCRIPT
echo Const ForReading = 1 > "%tmp%\fart.vbs"
echo Const ForWriting = 2 >> "%tmp%\fart.vbs"
echo strFileName = Wscript.Arguments(0) >> "%tmp%\fart.vbs"
echo strOldText = Wscript.Arguments(1) >> "%tmp%\fart.vbs"
echo strNewText = Wscript.Arguments(2) >> "%tmp%\fart.vbs"
echo Set objFSO = CreateObject("Scripting.FileSystemObject") >> "%tmp%\fart.vbs"
echo Set objFile = objFSO.OpenTextFile(strFileName, ForReading) >> "%tmp%\fart.vbs"
echo strText = objFile.ReadAll >> "%tmp%\fart.vbs"
echo objFile.Close >> "%tmp%\fart.vbs"
echo strNewText = Replace(strText, strOldText, strNewText) >> "%tmp%\fart.vbs"
echo strNewText = strNewText.Substring(0,strNewText.Length-1) >> "%tmp%\fart.vbs"
echo Set objFile = objFSO.OpenTextFile(strFileName, ForWriting) >> "%tmp%\fart.vbs"
echo objFile.WriteLine strNewText >> "%tmp%\fart.vbs"
echo objFile.Close >> "%tmp%\fart.vbs"
(所有的回显都是因为我在批处理运行时生成了 vbs,当一切都在一个文件中完成时,我倾向于发现事情更容易,然后这个 vbs 文件会在稍后的过程中被删除)。
【问题讨论】:
标签: batch-file for-loop vbscript replace token