vbs或bat搜索指定目录中的文件并根据扩展名打开文件,然后查找并替换字符串

时间:2013-05-29 22:46:30

标签: batch-file vbscript replace string-comparison

我们有一个程序可以在%appdata%\Roaming\中安装配置文档。 我需要一个脚本,我可以通过GPO推出,它将执行以下操作:

  • 按文件扩展名搜索指定目录
  • 搜索指定扩展名的所有文件以获取字符串
  • 使用其他字符串
  • 更改此字符串

鳍。

我试图为此开始学习Visual Basic,但我感觉很远 我的元素,因为我之前没有这样做过。

2 个答案:

答案 0 :(得分:0)

可以像这样处理给定文件夹中的文件:

Set fso = CreateObject("Scripting.FileSystemObject")
For Each f In fso.GetFolder("C:\your\folder").Files
  'do stuff
Next

仅处理具有特定扩展名的文件(例如.foo),添加如下条件:

Set fso = CreateObject("Scripting.FileSystemObject")
For Each f In fso.GetFolder("C:\your\folder").Files
  If LCase(fso.GetExtensionName(f.Name)) = "foo" Then
    'do stuff
  End If
Next

如果您还要处理子文件夹中的文件,则需要recurse into subfolders

字符串替换部分可能如下所示:

text = f.OpenAsTextStream.ReadAll
If InStr(text, "some string") > 0 Then
  f.OpenAsTextStream(2).Write Replace(text, "some string", "other string")
End If

答案 1 :(得分:0)

这是我在评论中提到的Hybrid Batch / VBScript

复制代码并另存为FindAndReplace.cmd 从CMD提示符或GP中的命令调用它,如下所示:

FindAndReplace "String to Find" "String to Replace"

我设置它的方式,它只会搜索以.txt结尾的文件并将递归到子文件夹中。将mask变量设置为顶级文件夹和filemask。如果您不想替换子文件夹中的文件中的文本,请从/S命令中删除DIR。它不区分大小写

FindAndReplace "String to Find" "String to Replace" is the same as
FindAndReplace "STRING TO FIND" "STRING TO REPLACE" or
FindAndReplace "String TO FIND" "STRING To Replace"


    ::Find and Replace
    ::Matt Williamson 
    ::5/30/2013

    @echo off
    setlocal
    set mask=%appdata%\My Folder\*.txt
    set tmp="%temp%\tmp.txt"
    If not exist %temp%\_.vbs call :MakeReplace
    for /f "tokens=*" %%a in ('dir "%mask%" /s /b /a-d /on') do (
      for /f "usebackq" %%b in (`Findstr /mic:"%~1" "%%a"`) do (
        echo(&Echo Replacing "%~1" with "%~2" in file %%~nxa
        <%%a cscript //nologo %temp%\_.vbs "%~1" "%~2">%tmp%
        if exist %tmp% move /Y %tmp% "%%~dpnxa">nul
      )
    )
    del %temp%\_.vbs
    exit /b

    :MakeReplace
    >%temp%\_.vbs echo with Wscript
    >>%temp%\_.vbs echo set args=.arguments
    >>%temp%\_.vbs echo .StdOut.Write _
    >>%temp%\_.vbs echo Replace(.StdIn.ReadAll,args(0),args(1),1,-1,1)
    >>%temp%\_.vbs echo end with