我需要更新文件和文件夹的“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的原生版本。谢谢!
答案 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