【发布时间】:2020-07-03 21:56:36
【问题描述】:
第一次发帖并提前为自己是一个完整而彻底的新手道歉。我继承了一些我只是想破解解决方案的东西,我对它的了解为零。我已经搜索了论坛并相信已经找到了部分答案(sed 命令)但是,我遇到了让它成功运行的问题。
我需要它在 Windows 机器上运行,它之前用于在 .csv 文件中进行简单的替换,现在我需要插入标题行而是。
我有一个 'fixit.cmd' 文件,其中包含这个;
set batdir=C:\Sed\filepath\batch
set impdir=C:\Sed\filepath\import
set filename=xxx
:: to read as parameter, uncomment next line
:: set filename=%1
cscript //NoLogo %batdir%\sed.vbs 1i"ABC,123" < %impdir%\%filename%.csv > %impdir%\%filename%_fixed.csv
pause
我有一个 'sed.vbs' 文件,其中包含这个;
Dim pat, patparts, rxp, inp
pat = WScript.Arguments(0)
patparts = Split(pat,"/")
Set rxp = new RegExp
rxp.Global = True
rxp.Multiline = False
rxp.Pattern = patparts(1)
Do While Not WScript.StdIn.AtEndOfStream
inp = WScript.StdIn.ReadLine()
WScript.Echo rxp.Replace(inp, patparts(2))
Loop
当我运行 'fixit.cmd' 我收到错误消息;
sed.vbs(7, 1) Microsoft VBScript runtime error: Subscript out of range: '[number: 1]'
我假设指向 的 sed.vbs' 内容仅支持前一个 replace 和/或我的标题行插入字符串不正确。
我需要在 'sed.vbs' 内容和/或我的标题行插入字符串中进行哪些修改才能成功插入标题行?
非常感谢任何/所有支持。
【问题讨论】:
-
既然你在Windows上,你能用powershell吗?
-
我最终将不得不放弃这个,只要 Powershell 可以配置为可以通过任务计划轻松自动化和执行,那么,是的,我愿意探索。
-
确实,您发现的 vb 脚本在行上应用了正则表达式,这里不适合。如果您的标题没有更改,那么您可以简单地将其保存到一个单独的文件中,然后使用
copy /b header.csv + input.csv input_fixed.csv将其与您的 csv 文件合并。 -
附带说明,如果您实际上无权访问 sed 的 Windows 实现,而只能访问 vb 存根,我不会使用标签“sed”来回答这个问题;)
-
@luciole75w,感谢您接受反馈和编辑,谢谢。我还阅读了有关创建
head.txt和cat head.txt file.csv > newfile.csv的信息。标头确实是固定值。但是,我很感激我在这里问了很多,我也不知道如何做到这一点,并且需要通过 'fixit.cmd' 和 'sed.vbs' 文件。你能提供任何指导吗?
标签: csv batch-file vbscript header-row