![](/img/trans.png)
[英]On Windows 10, grant a user rights to create, edit and delete files in the folder C:\VMs, but prevent deletion of the folder itself
[英]Edit files on folder whitelist in Windows environment
我有一个文件夹,里面有〜4000个文件夹。 在这些文件夹中的每个文件夹中都有一个我要编辑的.ini文件。 在.ini文件中,我想搜索一个字符串并将其替换为另一个字符串。
需要注意的是,我有一个特定的文件夹列表,如果可以的话,会列入白名单。 我只想更改在白名单中指定的文件夹内的.ini文件,而不要更改其余文件夹。
我的平台是Windows。
文件夹结构示例:
Parent Folder
Folder1
file.ini
Variable1=TOMATO
^^^^^^^^^^^^^^^^^ > Replace with: Variable1=Lettuce
Folder2
file.ini
DO NOTHING
Folder3
file.ini
Variable1=TOMATO
^^^^^^^^^^^^^^^^^ > Replace with: Variable1=Lettuce
FolderA
file.ini
DO NOTHING
FolderB
file.ini
DO NOTHING
FolderC
file.ini
Variable1=TOMATO
^^^^^^^^^^^^^^^^^ > Replace with: Variable1=Lettuce
对于以上文件夹结构,我的变量文件夹列表如下:
我的变量是:
我尝试使用WinGrep之类的工具,但只能看到单行排除项,而不能像上面那样调用文件夹列表。 我的一次性脚本的生产运行会将〜1000个文件夹从〜4000个列表中拉出,因此无法进行手动处理。
计划(与实现语言无关):
如果要使用VBScript版本,请在.ini文件和替换文件中发布一些详细信息。
更新:
VBScript代码可以帮助您入门:
Const csFrom = "Variable1=TOMATO"
Const csTo = "Variable1=Lettuce"
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim sDir : sDir = oFS.GetAbsolutePathName("..\test\13921972")
Dim tsFL : Set tsFL = oFS.OpenTextFile(oFS.BuildPath(sDir, "whitelist.txt"))
Do Until tsFL.AtEndOfStream
Dim sFSpec : sFSpec = Trim(tsFL.ReadLine())
If "" <> sFSpec Then
WScript.Echo "wl:", sFSpec
sFSpec = oFS.BuildPath(sDir, oFS.BuildPath(sFSpec, "some.ini"))
WScript.Echo "fs:", sFSpec
If oFS.FileExists(sFSpec) Then
Dim sAll : sAll = oFS.OpenTextFile(sFSpec).ReadAll()
WScript.Echo sAll
oFS.CreateTextFile(sFSpec, True).Write Replace(sAll, csFrom, csTo)
WScript.Echo oFS.OpenTextFile(sFSpec).ReadAll()
End If
End If
Loop
tsFL.Close
两次运行的输出:
wl: dir1
fs: E:\trials\SoTrials\answers\13415663\test\13921972\dir1\some.ini
Variable0=NoliMeTangere
Variable1=TOMATO
Variable2=NoliMeTangere
Variable0=NoliMeTangere
Variable1=Lettuce
Variable2=NoliMeTangere
wl: dir1
fs: E:\trials\SoTrials\answers\13415663\test\13921972\dir1\some.ini
Variable0=NoliMeTangere
Variable1=Lettuce
Variable2=NoliMeTangere
Variable0=NoliMeTangere
Variable1=Lettuce
Variable2=NoliMeTangere
我将其作为Powershell解决方案提交。 对于所有文件,它都需要静态的“ before”和“ after”字符串。 如果不是这种情况,则可能需要使用哈希表来存储值。 如您所见,它还要求白名单每行有一个路径,并且路径是绝对路径(例如C:\\ windows)
$before = "this string is getting replaced"
$after = "this is my replacement"
$whitelist = [array](Get-content "path\to\whitelist")
foreach ($path in $whitelist) {
$files = Get-ChildItem *.ini -Path $path -Recurse
foreach ($file in $files) {
(Get-Content $file.fullname).Replace($before,$after) | set-content $file.fullname
}
}
Whitelist.txt示例:
C:\test\whats up
C:\test\1
C:\test\2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.