-2

我们有一个程序可以在%appdata%\Roaming\. 我需要一个可以通过 GPO 推出的脚本,该脚本将执行以下操作:

  • 按文件扩展名搜索指定目录
  • 在指定扩展名的所有文件中搜索字符串
  • 用另一个字符串改变这个字符串

鳍。

我试图为此开始学习 Visual Basic,但我觉得我的元素大大超出了我的范围,因为我以前没有做过这样的事情。

4

2 回答 2

0

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

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

FindAndReplace "String to Find" "String to Replace"

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

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
于 2013-05-30T16:27:43.523 回答
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

如果您还想处理子文件夹中的文件,则需要递归到子文件夹中。

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

text = f.OpenAsTextStream.ReadAll
If InStr(text, "some string") > 0 Then
  f.OpenAsTextStream(2).Write Replace(text, "some string", "other string")
End If
于 2013-05-30T07:21:27.163 回答