更新文件或文件夹修改日期

Gra*_*eca 3 cmd batch-file windows-7

我需要更新文件和文件夹的"修改日期"属性,因为它们从一个位置复制到另一个位置,以便"修改日期"=当前系统时间.我有一台装有Windows 7的PC,我没有管理权限,所以我无法安装任何自定义实用程序.我当前的bat文件使用XCOPY:

xcopy "\\sharepoint\dept\gis\Abandoned_Wire\*.*" "\\corp.dom\fs4\g1\OUTPUT\GRIDPROD\PDF\Maps\Abandon Wire Maps" /c /s /r /y /i
Run Code Online (Sandbox Code Playgroud)

在我的Windows XP盒子上,我使用来自UnxUtils的"touch"命令,但我找不到Windows 7的原生等效版本.谢谢!

dbe*_*ham 7

在Windows上"触摸"文件有一种非常简单(虽然很神秘)的语法.(更新上次修改的时间戳)

如果文件在当前目录中,您只需要:

copy /b fileName+
Run Code Online (Sandbox Code Playgroud)

如果文件位于其他路径中,则此方法有效:

copy /b somePath\fileName+,, somePath\
Run Code Online (Sandbox Code Playgroud)

但是,您似乎仍然需要进行大量编码,因为我相信您只想触摸复制的文件.

以下是未经测试的,但我相信它会起作用.我无法保证表现.该解决方案需要2个不用的驱动器号 我假设K:和L:可用.

@echo off

:: map unused drive letters to your source and target paths
subst K: "\\sharepoint\dept\gis\Abandoned_Wire"
subst L: "\\corp.dom\fs4\g1\OUTPUT\GRIDPROD\PDF\Maps\Abandon Wire Maps"

:: replicate the folder hierarchy
xcopy K: L: /t

:: recursively copy and touch all files
for /r K: %%F in (*) do (
  xcopy "%%F" "L:%%~pnxF" /r /y
  copy /b "L:%%~pnxF"+,, "L:%%~pF"
)

:: release the temporary drive mappings
subst /d K:
subst /d L:
Run Code Online (Sandbox Code Playgroud)


Nat*_*man 5

您可以使用powershell,我认为默认情况下已经安装在Windows 7上.将此行添加到批处理文件以运行powershell命令,该命令更新名为Abandoned_Wire*.*的所有文件的时间戳:

powershell.exe -command "ls 'folder\Abandoned_Wire\*.*' | foreach-object { $_.LastWriteTime = Get-Date }"
Run Code Online (Sandbox Code Playgroud)

这条线的作用很简单:

-command:告诉powershell运行以下命令并立即返回

ls:列出指定路径中的所有匹配文件

foreach-object:对ls找到的每个文件运行以下块

$_.LastWriteTime = Get-Date:对于每个文件,设置为LastWriteTime返回的值Get-Date(今天的日期和时间)