返回

如何使用批处理脚本修改指定文件夹的修改时间

windows

修改指定文件夹的修改时间

前言

管理文件的日期和时间戳对于各种任务至关重要,例如版本控制、文件归档和法务合规。Windows 批处理脚本为自动化此类任务提供了一种简单且强大的方法。在本教程中,我们将探讨如何编写一个批处理脚本,根据给定的路径,将指定文件夹的修改时间更改为最近的日期和时间。

获取当前日期和时间

脚本的第一步是获取当前日期和时间。我们可以使用 datetime 命令来实现这一点:

@echo off
setlocal enabledelayedexpansion
set _now=%date:~4,2%-%date:~7,2%-%date:~10,4% %time:~0,2%:%time:~3,2%

这会将当前日期和时间存储在 _now 变量中,格式为 YY-MM-DD HH:MM

遍历给定路径中的文件夹

接下来,我们需要遍历给定的路径并查找所有文件夹:

for /d %%d in ("%~1\*\") do (
  call :update-folder-datetime "%%d"
)

此代码使用 for /d 循环迭代给定路径 (%~1) 中的所有文件夹 (%%d)。然后,它调用 update-folder-datetime 函数来更新每个文件夹的修改时间。

更新文件夹的修改时间

update-folder-datetime 函数执行以下操作:

  1. 获取文件夹的当前修改时间:
set _folderDate=%~t~\_folder~
  1. 将当前修改时间与我们获取的当前时间进行比较:
if "!_folderDate!" NEQ "!_modDate!" (
  1. 如果文件夹的修改时间不等于当前时间,则:
  • 获取文件夹的原始修改时间:
"dir /O:D /T:D "_folder">"%temp%\__mod-date__"".txt
  • 计算新修改时间:
set /a _newModDate="!_modDate:~0,4!-%_modDate:~5,2!-%_modDate:~8,2! %_now:~11,9%"
  • 更新文件夹的修改时间:
powershell -command 'Set-ItemProperty -Path "'_folder'" -Name LastWriteTime -Value "!_newModDate!""'

示例脚本

以下是完整脚本的一个示例:

@echo off
setlocal enabledelayedexpansion
set _now=%date:~4,2%-%date:~7,2%-%date:~10,4% %time:~0,2%:%time:~3,2%
for /d %%d in ("M:\Test\*") do (
  call :update-folder-datetime "%%d"
)
pause
goto :EOF

:update-folder-datetime
set _folder=%1
set _folderDate=%~t~\_folder~
set _modDate=%_now:~0,10%
if "!_folderDate!" NEQ "!_modDate!" (
  "dir /O:D /T:D "_folder">"%temp%\__mod-date__"".txt
  set _originalModDate=%_now:~0,10%-%_now:~11,9%
  for /f "tokens=4,5 delims=/" %%i in ("%temp%\__mod-date__"".txt") do set _originalModDate=%%i/%%j
  set /a _newModDate="!_modDate:~0,4!-%_modDate:~5,2!-%_modDate:~8,2! %_now:~11,9%"
  powershell -command 'Set-ItemProperty -Path "'_folder'" -Name LastWriteTime -Value "!_newModDate!""'
)

常见问题解答

  1. 如何使用此脚本?
  • 将脚本复制到一个 .bat 文件中。
  • 用要修改其修改时间的文件夹的路径替换 M:\Test
  • 双击 .bat 文件运行脚本。
  1. 如何更改日期和时间格式?
  • 可以在 set _now 行中调整日期和时间格式。
  • 有关更多详细信息,请参阅 datetime 命令的文档。
  1. 如何处理包含空格的路径?
  • 用双引号引起来包含空格的路径。
  • 例如:for /d %%d in ("M:\Path With Spaces\*") do ( ... )
  1. 我收到一条错误消息,说 PowerShell 没有安装。
  • 确保已在计算机上安装 PowerShell。
  • 如果没有,请从 Microsoft 网站下载并安装它。
  1. 脚本没有更新文件夹的修改时间。
  • 确保您有权修改文件夹。
  • 检查脚本是否存在语法错误。
  • 尝试使用不同的日期和时间格式。