0

我正在寻找一种解决方案,使用户能够将文件保存到目录中,但之后无法对其进行修改。我知道这对于 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" 

}

我将其修改为仅处理 4 小时未修改的文件,但它不起作用。

然后我考虑使用 FreeFileSync 之类的东西,但它不会处理重复项,以防意外创建它们。

如果用户可以在创建后立即更改文件是可以的,但一段时间后文件应该变为只读以防止意外修改/删除。更确切地说,我会看到该文件在其创建的第二个变为只读。

我确信有一些软件可以处理这种事情以防止欺诈或其他事情,但我似乎无法找到它。任何帮助是极大的赞赏!

4

0 回答 0