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

时间:2013-03-04 18:50:58

标签: windows-7 batch-file cmd

我需要更新文件和文件夹的“Date Modified”属性,因为它们从一个位置复制到另一个位置,以便“Date Modified”=当前系统时间。我有一台装有Windows 7的电脑,我没有管理权限,所以我无法安装任何自定义工具。我当前的bat文件使用XCOPY:

xcopy "\\sharepoint\dept\gis\Abandoned_Wire\*.*" "\\corp.dom\fs4\g1\OUTPUT\GRIDPROD\PDF\Maps\Abandon Wire Maps" /c /s /r /y /i

在我的Windows XP盒子上,我使用了UnxUtils的“touch”命令,但我找不到Windows 7的原生版本。谢谢!

4 个答案:

答案 0 :(得分:7)

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

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

copy /b fileName+

如果文件位于其他路径中,则可以正常工作:

copy /b somePath\fileName+,, somePath\

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

以下是未经测试的,但我相信它会起作用。我无法保证表现。该解决方案需要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:

答案 1 :(得分:5)

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

powershell.exe -command "ls 'folder\Abandoned_Wire\*.*' | foreach-object { $_.LastWriteTime = Get-Date }"

该行正在做的只是:

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

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

foreach-object:对ls找到的每个文件

运行以下块

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

答案 2 :(得分:0)

Robocopy 应该可以为您完成此操作。 robocopy是自Vista以来Windows中包含的本机工具。

robocopy "\sharepoint\dept\gis\Abandoned_Wire" "\corp.dom\fs4\g1\OUTPUT\GRIDPROD\PDF\Maps\Abandon Wire Maps" /COPY:DA /S /IS

默认情况下,robocopy将复制DAT:数据,属性和时间戳,但这可以通过/COPY标志进行控制。

有关所有选项,请参阅robocopy /?

答案 3 :(得分:0)

for /R %i in (\*.\*) do copy %i /B+ ,,/Y
相关问题