に構成ドキュメントをインストールするプログラムがあります%appdata%\Roaming\
。次のことを行う GPO 経由でプッシュできるスクリプトが必要です。
- 指定したディレクトリをファイル拡張子で検索
- 指定された拡張子のすべてのファイルから文字列を検索します
- この文字列を別の文字列に変更します
フィン。
このために Visual Basic の学習を開始しようとしましたが、これまでにこのようなことをしたことがないので、自分の要素から大きく外れているように感じます。
に構成ドキュメントをインストールするプログラムがあります%appdata%\Roaming\
。次のことを行う GPO 経由でプッシュできるスクリプトが必要です。
フィン。
このために Visual Basic の学習を開始しようとしましたが、これまでにこのようなことをしたことがないので、自分の要素から大きく外れているように感じます。
特定のフォルダー内のファイルは、次のように処理できます。
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
これが、コメントで言及したハイブリッド バッチ/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