Windows 7 更新文件或文件夹日期已修改

Windows 7 更新文件或文件夹日期已修改,windows-7,batch-file,cmd,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 /

当文件和文件夹从一个位置复制到另一个位置时,我需要更新它们的“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

在我的WindowsXP框中,我使用了UnxUtils中的“touch”命令,但我找不到与Windows7本机相同的命令。谢谢大家!

您可以使用
powershell
,我相信它已经默认安装在Windows 7上了。将此行添加到批处理文件中,以运行powershell命令,更新所有名为遗弃的\u Wire**文件的时间戳:

powershell.exe -command "ls 'folder\Abandoned_Wire\*.*' | foreach-object { $_.LastWriteTime = Get-Date }"
这条线所做的只是:

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

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

foreach对象
:对找到的每个文件运行以下块


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

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
标志进行控制

有关所有选项,请参阅。

在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:

很高兴看到有人解释他们的答案。投票++。我将假设你的ps代码功能如广告所示,我对ps几乎一无所知。但它将“接触”所有文件,而不仅仅是刚刚复制的文件。这可能是个问题。@dbenham:不,它将触及所有名为“废弃的\u Wire**”的文件,这是OP最初指定的文件。我现在明白了,这个问题已经被你编辑成添加一个\,但我不相信这就是OP的意思。我让他/她自己决定。我看到了混乱的根源。原始问题的行格式为引号,而不是代码。这导致一些
“\\”
显示为
“\”
,而
“\”
显示为空。我将引用重新格式化为代码,我很确定它代表了OP的意图。路径和问题现在更有意义了。您的答案对于原始格式的问题更有意义,但编辑确实会使您的答案无效。即使使用原始的问题格式,您的答案仍然容易触及并非来源的预先存在的文件。这很有意义。我已将\添加到我的答案中。没错,目标文件夹中已有的文件也会被触动。这可以通过首先使用powershell执行复制来解决。这似乎应该可以工作,但它正在为我复制源的时间戳。@dbenham如果它不按它所说的那样工作,那将是相当令人失望的,但也不那么令人惊讶<代码>:(我只是自己尝试了一下,它只是忽略了
/copy
标志并执行了
DAT
复制。是时候退出调试了!如果有人对
机器人复制的行为有任何了解,请点击此处编辑-将副本更改为XCOPY/R/Y以避免现有只读文件出现问题尽管这可能会回答这个问题,但我在代码示例中添加解释总是很好的。
for /R %i in (\*.\*) do copy %i /B+ ,,/Y