Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 更改文件上次访问时间_Powershell_Batch File_Dos - Fatal编程技术网

Powershell 更改文件上次访问时间

Powershell 更改文件上次访问时间,powershell,batch-file,dos,Powershell,Batch File,Dos,我希望在windows 2008环境中,通过在未来增加+20年来更改文件的上次访问时间,我尝试在windows服务器上安装unix实用程序,并使用了touch–a–t命令,但由于我的path文件夹z:\data\backup\*.bkf中每天都有新文件,因此第二次我无法通过跳过已修改的旧文件来修改新文件 e、 g.命令和输出: C:\unix\wbin>touch-a-t 120312002033 z:\data\backup*.bkf 信息:路径中的所有文件*.bkf修改如下: 创建日期:今天

我希望在windows 2008环境中,通过在未来增加+20年来更改文件的上次访问时间,我尝试在windows服务器上安装unix实用程序,并使用了
touch–a–t
命令,但由于我的path文件夹
z:\data\backup\*.bkf
中每天都有新文件,因此第二次我无法通过跳过已修改的旧文件来修改新文件

e、 g.命令和输出:

C:\unix\wbin>touch-a-t 120312002033 z:\data\backup*.bkf

信息:路径中的所有文件*.bkf修改如下:

创建日期:今天2013年12月9日 修改:今天2013年12月9日 查阅日期:2033年12月3日星期六

e、 g.想象一下,今天我的path文件夹
z:\data\backup\*.bkf
中有1000个文件,我已经将上次访问时间更改为+20年,明天我将在扩展名为.bkf的同一文件夹中还有1500个文件,因此,现在我只想更改那些新文件,并将它们延长到+20年,每天继续这样做,跳过已经完成的文件,只接触新文件,运行批处理

请注意:一旦我更改上次访问时间并添加+20年,这些文件将立即锁定在文件夹
z:\data\backup
中20年,无法删除或修改,但只能读取,这是一个错误 EMC Data Domain的保留锁定功能

我不是cli或powershell专家。 我真的很感谢你的帮助,并提前感谢你抽出时间

致以最良好的祝愿,
Bobby.

我个人会用C或类似的东西来做这件事(没有必要,但这是因为我几天前做过类似的工作)

您可以使用opendir和readdir运行您的文件,然后使用stat或lstat逐个运行您的所有文件,然后您将得到一个带有字段st_atime的结构,您可以将其与time()进行比较,因为如果st_atime大于当前时间戳,那么您将看到一个已修改的,如果没有,只需更新st_atime即可


希望我能帮助你。

好吧,我给你一些可以一起工作的东西:

get-childitem | select LastWriteTime
最后,如果要检查每个文件的特定日期,请使用:

get-childitem | foreach-object {
    if ($_.lastwritetime.year -eq 2013) {
        write-host $_.Name was created 2013
    } else {
        write-host $_ was not created 2013
    }
}
在批处理中,您可以这样做:

for /d %%f in (*) do @echo %%f is born on %%~tf
因此,从理论上讲,你可以得到如下结果:

@echo off
setlocal ENABLEDELAYEDEXPANSION
for %%f in (*) do (
    set FILE_DATE="%%~tf"
    set FILE_YEAR=!FILE_DATE:~7,4!
    if !FILE_YEAR! == 2013 (
        echo %%f was born in 2013 
    ) else (
        echo %%f was not born in 2013
    )
)
但是要小心,首先看看%%~tf将在您的机器上输出什么,因为日期时间输出的格式在不同的文化中经常不同。基本上,您必须在中处理子字符串!存档日期

最终编辑:

这就是我要做的工作:)


这将查看当前文件夹中的每个*.bkf文件,如果它的最后一次访问时间小于或等于当前年份,它将在最后一次访问时间上增加20年。其他所有文件都是单独保存的。

您好,我尝试了类似的方法,但似乎不起作用,但我非常接近。感谢您的帮助ps D:\>$files=Get ChildItem“D:\folder1*.bkp”;foreach($files中的f){$f.LastAccesstime=($f.LastAccesstime).AddHours(23);}PS D:\>$files=Get ChildItem“D:\folder1*.bkp”;foreach($files中的f){$f.LastAccesstime=($f.LastAccesstime).Addyears(20);}问题是,这将使任何文件(即使是那些已经在2033年的文件)增加20年。。。在做某事之前,你真的应该对日期进行if块检查是的,你是对的!事实上,我想跳过那些已经在2033年的文件,只接触当前日期的新文件,并添加20年或固定日期,如2033年12月12日`我非常接近,但不是以正确的方式编写脚本并以错误结束,我非常感谢您的帮助,因为我迫切需要找到解决方案,非常感谢。
new-variable now -value (date)
new-variable nact -value ((date).addyears(20))
get-childitem *.bkf | foreach-object {
    set-variable nact -value (($_.lastaccesstime).addyears(20))
    if ($_.lastaccesstime.year -le $now.year) {
        write-host [$now]: Updateing LastAccessTime of $_.name to $nact
        $_.lastaccesstime = ($nact)
    } else {
        write-host [$now]: Ignoring $_.name
    }
}