问题描述
我正在寻找一种解决方案,使用户能够将文件保存到目录中,但之后无法对其进行修改。我知道这在 NTFS 权限下是不可能的,因为 Windows 处理文件的方式。我在保存文件时理解它的方式,Windows 将创建一个空文件,然后打开它进行写入,但没有修改权限它不能这样做并给出错误。
我的第二次尝试是编写一个脚本,将文件从可写文件夹移动到只读文件夹,然后在一段时间内没有写入文件,但到目前为止,这太复杂了。
>这是我第一次尝试:
Get-ChildItem -Path "D:\DATA\data import" -Recurse | where {$_.Lastwritetime -lt (date).addhours(-4)} | Move-Item -Destination "D:\DATA\data"
这会将所有文件在 4 小时内未修改后放在相同的文件夹结构中,但如果文件夹已经存在而不是合并它,则会失败。它还会覆盖重复项,这是我不想要的。
第二次尝试是使用带有 -Container 和 -Recurse 的 copy-Item,但这也会覆盖文件,并且出于某种原因将所有文件复制到目标的根目录中,但也会将副本放入正确的文件夹中,如源。>
最后一次尝试:
$SourceDir = "D:\SCRIPTS\raw data"
$DestinationDir = "D:\SCRIPTS\raw data import"
#create dir if not exists (dont remove if exist)
New-Item -ItemType Directory -Path $DestinationDir -Force
#get list files destination dir
$DestinationFiles=gci $DestinationDir -File
#loop on file source and create newname for copy while name exist already
gci $SourceDir -File | where {$_.Lastwritetime -lt (date).addminutes(-0)} |%{
$counter=0
$name=$_.Name
while ($name -in $DestinationFiles.Name)
{
$counter++;
$name="{0}_{1:d6}{2}" -f $_.BaseName,$counter,$_.Extension
}
copy-Item -Path $_.FullName -Destination "$DestinationDir\$name"
}
然后我考虑使用 FreeFileSync 之类的东西,但它不会处理意外创建的重复项。
如果用户可以在创建后立即更改文件是可以的,但一段时间后文件应该变为只读以防止意外修改/删除。更确切地说,我会看到该文件在创建后变为只读。
我确定有一些软件可以处理此类问题以防止欺诈或其他什么,但我似乎找不到它。非常感谢任何帮助!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)