我们有一个程序可以在%appdata%\Roaming\
. 我需要一个可以通过 GPO 推出的脚本,该脚本将执行以下操作:
- 按文件扩展名搜索指定目录
- 在指定扩展名的所有文件中搜索字符串
- 用另一个字符串改变这个字符串
鳍。
我试图为此开始学习 Visual Basic,但我觉得我的元素大大超出了我的范围,因为我以前没有做过这样的事情。
我们有一个程序可以在%appdata%\Roaming\
. 我需要一个可以通过 GPO 推出的脚本,该脚本将执行以下操作:
鳍。
我试图为此开始学习 Visual Basic,但我觉得我的元素大大超出了我的范围,因为我以前没有做过这样的事情。
这是我在评论中提到的 Hybrid Batch/VBScript
复制代码并保存为 FindAndReplace.cmd 从CMD
提示符或 GP 中的命令调用它,如下所示:
FindAndReplace "String to Find" "String to Replace"
我设置它的方式,它只会搜索以 .txt 结尾的文件,并将递归到子文件夹中。将掩码变量设置为顶级文件夹和文件掩码。如果您不想替换子文件夹中文件中的文本,请/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
给定文件夹中的文件可以这样处理:
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