4

我需要更新文件和文件夹的“修改日期”属性,因为它们从一个位置复制到另一个位置,以便“修改日期”= 当前系统时间。我有一台装有 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

在我的 Windows XP 机器上,我使用来自 UnxUtils 的“touch”命令,但我找不到 Windows 7 原生的等效命令。谢谢!

4

4 回答 4

8

在 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:
于 2013-03-04T23:35:51.717 回答
5

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

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

那条线的作用很简单:

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

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

foreach-objectls:在找到的每个文件上运行以下块

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

于 2013-03-04T19:18:20.033 回答
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 /?所有选项。

于 2013-03-04T21:48:36.070 回答
-1
for /R %i in (\*.\*) do copy %i /B+ ,,/Y
于 2015-06-22T08:45:41.127 回答