-2

に構成ドキュメントをインストールするプログラムがあります%appdata%\Roaming\。次のことを行う GPO 経由でプッシュできるスクリプトが必要です。

  • 指定したディレクトリをファイル拡張子で検索
  • 指定された拡張子のすべてのファイルから文字列を検索します
  • この文字列を別の文字列に変更します

フィン。

このために Visual Basic の学習を開始しようとしましたが、これまでにこのようなことをしたことがないので、自分の要素から大きく外れているように感じます。

4

2 に答える 2

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

サブフォルダー内のファイルも処理する場合は、 subfolders に再帰する必要があります。

文字列置換部分は次のようになります。

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 に答える
0

これが、コメントで言及したハイブリッド バッチ/VBScript です。

コードをコピーし、FindAndReplace.cmd として保存します。プロンプトから呼び出すCMDか、次のように GP のコマンドとして呼び出します。

FindAndReplace "String to Find" "String to Replace"

私がセットアップした方法では、.txt で終わるファイルのみを検索し、サブフォルダーに再帰します。mask 変数を最上位のフォルダーとファイルマスクに設定します。サブフォルダー内のファイルのテキストを置き換えたくない場合は/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
于 2013-05-30T16:27:43.523 に答える