调用 VBScript 时在批处理脚本中设置参数
Posted
技术标签:
【中文标题】调用 VBScript 时在批处理脚本中设置参数【英文标题】:Setting parameters in batch script while calling VBScript 【发布时间】:2020-06-05 20:56:30 【问题描述】:我有一个 bat 文件,它调用转换文件编码的 vbscript。 在通过设置文件的一部分运行代码时,它可以正常工作,但是当我尝试将多个文件作为参数传递时,我收到以下错误: microsoft vbscript 运行时错误:无效或不合格的引用
你可以在 run.cmd 下面看到我的批处理脚本:
@Echo off
SET CHEMINDAT = C:\Users\myuser\Desktop\TRY\DATA_TY\
SET CHEMINTMP = C:\Users\myuser\Desktop\TRY\TMP\
echo %DATE% %TIME% Debut de traitement.
dir %CHEMINDAT%* /a:-d/b > %CHEMINTMP%-liste.txt 2
FOR /F "eol=; tokens=1 delims=, " %%i in (%CHEMINTMP%-liste.txt) do (
echo %%i > %CHEMINTMP%Fichier_en_cours.txt
echo %DATE% %TIME% Traitement du fichier : %%i
cscript //NoLogo C:\Users\myuser\Desktop\TRY\\Scripts\unix2dos_7.vbs %%i
)
pause
exit /b 1
您将在下面找到我的 VBScript 'unix2dos_7.vbs':
Const adTypeBinary = 1
Const adTypeText = 2
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2
Const adWriteLine = 1
Const adReadLine = -2
Const adLF = 10
Const adCR = 13
Const adCRLF = -1
Set streamUTF8 = CreateObject("ADODB.Stream")
Set streamASCII = CreateObject("ADODB.Stream")
Dim args
set args = Wscript.arguments
strOutOne= args(0)
streamUTF8.Open
streamUTF8.Type = adTypeText
streamUTF8.LineSeparator = adCRLF
streamUTF8.Charset = "UTF-8"
streamUTF8.LoadFromFile strOutOne
streamASCII.Open
streamASCII.Type = adTypeText
streamASCII.LineSeparator = adCRLF
streamASCII.CharSet = "us-ascii"
Do Until streamUTF8.EOS
streamASCII.WriteText streamUTF8.ReadText(adReadLine), adWriteLine
Loop
streamASCII.SaveToFile "myfileConverted.txt", adSaveCreateOverWrite
我还想用新文件替换原始文件,而不是创建一个新文件“myfileConverted.txt”。这样我就没有两次相同的文档了
有人可以帮忙吗?
提前致谢
【问题讨论】:
我要问的第一个问题是,为什么?我还建议你看看这个previous question,它是cmets,它是答案,它利用powershell,而不是vbscript。 如果您正在处理长文件名,那么您可能需要在调用 .vbs 时在 .cmd 文件中用双引号 (") 引用 (")%%i
;否则,您的 .vbs 只会得到路径的第一部分。另外,在 TRY 之后去掉你的双反斜杠 (\)。或者,你可能需要调用 32 位版本的 cscript.exe。最后,一定要.Close
你的 ADODB。 .vbs 脚本中的流对象。C:\Windows\SysWOW64\cscript.exe //NoLogo C:\Users\myuser\Desktop\TRY\Scripts\unix2dos_7.vbs "%%i"
【参考方案1】:
我能够做我想做的事,你会在下面看到代码: 批号:
@Echo off
SET CHEMINDAT = C:\Desktop\try\script_try_2\data\
SET CHEMINTMP = C:\\Desktop\try\TMP\
echo %DATE% %TIME% Debut de traitement.
dir %CHEMINDAT%* /a:-d/b > %CHEMINTMP%-liste.txt
FOR /F "eol=; tokens=1 delims=, " %%i in (%CHEMINTMP%-liste.txt) do (
echo %%i > %CHEMINTMP%Fichier_en_cours.txt
echo %DATE% %TIME% Traitement du fichier : %%i
cscript //NoLogo C:\Desktop\try\script_try_2\unix2dos_7_2.vbs "%%i"
)
pause
exit /b 1
我的 vbScript:
Const adTypeBinary = 1
Const adTypeText = 2
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2
Const adWriteLine = 1
Const adReadLine = -2
Const adLF = 10
Const adCR = 13
Const adCRLF = -1
Set streamUTF8 = CreateObject("ADODB.Stream")
Set streamASCII = CreateObject("ADODB.Stream")
set args = Wscript.arguments
strOutOne= args(0)
streamUTF8.Open
streamUTF8.Type = adTypeText
streamUTF8.LineSeparator = adCRLF
streamUTF8.Charset = "UTF-8"
streamUTF8.LoadFromFile = strOutOne
streamASCII.Open
streamASCII.Type = adTypeText
streamASCII.LineSeparator = adCRLF
streamASCII.CharSet = "us-ascii"
Do Until streamUTF8.EOS
streamASCII.WriteText streamUTF8.ReadText(adReadLine), adWriteLine
Loop
streamASCII.SaveToFile(strOutOne), adSaveCreateOverWrite
【讨论】:
以上是关于调用 VBScript 时在批处理脚本中设置参数的主要内容,如果未能解决你的问题,请参考以下文章
vbscript 在VBScript中设置,获取和清除ClipBoard文本。
如何在配置文件中定义的 PowerShell 脚本中设置环境变量?