从目录中的所有文件批处理执行VBS

时间:2016-11-01 09:32:25

标签: batch-file vbscript

如何在目录中的所有文件上循环以下批处理代码:

for /f "tokens=*" %%f in ('dir /b *.txt') do (
  set OldFile=%cd%/%%f
  set NewFile=%cd%/2%%f
  echo. > "%NewFile%"
  start far.vbs "%NewFile%" "%OldFile%"
)

其中far.vbs如下:

Set OldFile = CreateObject("Scripting.FileSystemObject")
Set rdOldFile = OldFile.OpenTextFile(WScript.Arguments(1), 1)
oContent = rdOldFile.ReadAll
rdOldFile.Close

Set lOldFile = CreateObject("Scripting.FileSystemObject")
Set lrdOldFile = OldFile.OpenTextFile(WScript.Arguments(1), 1)
oLen = Len(lrdOldFile.ReadAll)
lrdOldFile.Close

oData = oContent
oData = Right(oContent, oLen-1)
oData = Left(oData, oLen-2)

Set NewFile = CreateObject("Scripting.FileSystemObject")
Set fData = NewFile.OpenTextFile(WScript.Arguments(0), 2)
fData.WriteLine (oData)
fData.Close

目前没有生成文件,并且似乎没有执行vbs代码。该目录应包含带有一些通用字符串的文本文件和带有删除第一个和最后两个字符的far.vbs脚本。

此脚本的目的是从文件夹中的多个文件中删除不必要字符的部分。

1 个答案:

答案 0 :(得分:2)

for循环中的变量扩展并不像您期望的那样工作。整个循环作为一个语句读取,所有%var%在此时展开。要使代码正常工作,您需要启用delayed expansion。您可能还想使用cscript.exe代替start

setlocal EnableDelayedExpansion

for /f "tokens=*" %%f in ('dir /b *.txt') do (
  set "OldFile=%cd%/%%f"
  set "NewFile=%cd%/2%%f"
  echo. > "!NewFile!"
  cscript.exe //NoLogo far.vbs "!NewFile!" "!OldFile!"
)