在CMD中用文件的日期重命名文件

Rename file with file's date in CMD

我想我咬的太多了,无法咀嚼。

我是法庭记者,在明尼苏达州法院系统工作。我们制定了一项新政策来归档我们的电子笔记,因为许多记者不再打印纸质笔记。不同品牌的报告机创建的文件具有不同的命名约定,我们希望将名称标准化,以便在我们不在的情况下,地区管理人员可以轻松找到正确的注释。

所以我们想重命名 FILE.001、FILE.002 和 20151018-082815.sgstn,例如,重命名为文件的创建日期。 sgstn 文件当然有一个唯一的名称,但是无处不在的创建 FILE.* 文件的编写器确实需要重命名,标准化将帮助所有人。我正在创建一个 CMD 文件,该文件还将轮询法官的姓名和作家品牌,因此任何人从存储中提取笔记都会准确找到他们要找的内容:“2015-10-18 Stentura 作家琼斯法官。 001

我找到了很多用今天的日期和时间重命名文件的解决方案,但我们想用他们自己的日期和时间重命名它们。

我在 Windows 7 Pro 中作为标准用户工作,没有安装第三方软件的选项。 Windows 允许个人用户设置他们喜欢的日期样式,这里的 dbenham 和其他人向我展示了如何从注册表中获取该样式:

:: For REG.EXE 3.0 (Windows XP) and later versions
FOR /F "tokens=3" %%A IN (
  'REG QUERY "HKCU\Control Panel\International" /v sShortDate'
  ) DO (SET sShortDate=%%A)
Echo %sShortDate%

这将 return yyyy-MM-dd 或 d-M-yy 或用户选择的任何内容。

然后我可以测试看看字符串不同部分的内容是什么:

for /f "tokens=1,2,3 delims=/-" %%A in ("%sShortDate%") do (
    for /f "tokens=1" %%D in ("%%A") do (
        set Part1=%%D
    )
    for /f "tokens=1" %%D in ("%%B") do (
        set Part2=%%D
    )
    for /f "tokens=1" %%D in ("%%C") do (
        set Part3=%%D
    )
)
echo Part1 = %Part1%
echo Part2 = %Part2%
echo Part3 = %Part3%

但这一切都变得非常笨拙,在在这里和其他地方整整 24 小时阅读之后,我只读了一半。在 Windows 中,在 CMD 提示符或任何命令行可用工具中,真的没有办法以可预测的格式获取文件的日期并使用该日期吗?

谁能可怜我,给我们一个不那么麻烦的方法来找出用户的特定系统认为日期的格式应该是什么,从而一致地重命名放在 CMD 快捷方式上的所有文件?

终于,这是我第一次post来这里了。所有建设性的批评都欣然接受。说真的。

-- 蒂莫西·麦高恩

编辑添加: 也许我一直在想这个。这是我正在轮询日期格式的注册表中的用户配置单元。我们应该能够从命令行写入我们自己的配置单元;对吗?

所以我可以读取用户的首选日期格式,将其保存到变量中,强制使用我想要使用的日期格式,处理文件,然后重置用户的日期格式。正确的?值得一试。

如果它有效,我会报告,但欢迎任何更多评论!

第一个想法:

使用分隔符获取文件日期或名称或扩展名

@echo off

setlocal enabledelayedexpansion

for %%a in (*.*) do (
  set "$FileName=%%~na"
  set "$FileExtension=%%~xa"
  set "$FileDate=%%~ta"
  set "$FileDate=!$FileDate:/=-!"
  echo !$FileDate!-!$FileName!!$FileExtension!)

编辑我

获取 YYYY-MM-DD 格式的日期:

@echo off

setlocal enabledelayedexpansion

for %%a in (*.*) do (
  set "$FileName=%%~na"
  set "$FileExtension=%%~xa"
  set "$FileDate=%%~ta"
  set "$FileDate=!$FileDate:/=-!"
  set "$FileDate=!$FileDate:~6,4!-!$FileDate:~3,2!-!$FileDate:~0,2!"
  echo !$FileDate!-!$FileName!!$FileExtension!)

也许这不是我所问问题的完整答案,但它应该是我获得可预测日期所需的全部内容。

可以从注册表中保存用户的首选日期样式,强制使用您想要的日期样式,开展您的业务,然后 return 用户的首选日期样式(假设他们不取消运行).

中间的批处理文件

输出很乱,但它只是证明了这个概念是可行的。

@echo off
:: replace and then restore date style in Windows registry.

:: find current date style; save to environment variable OriginalsShortDate
FOR /F "tokens=3" %%A IN (
  'REG QUERY "HKCU\Control Panel\International" /v sShortDate'
  ) DO SET OriginalsShortDate=%%A

:: display current date style as reflected by date of this CMD/BAT file
echo Current date style to be saved:  %OriginalsShortDate%
echo Looks like this:
dir %0
echo Press any key to set yyyy-MM-dd date style
pause

:: force preferred date style and hide success message
reg add "HKCU\Control Panel\International" /v sShortDate /d yyyy-MM-dd /f >nul

:: prove it's changed
:: //////////// here's where you do your business \\\\\\
echo Check file's date now.
dir %0
echo (Your Windows task bar may not reflect change immediately.)
echo.
echo Press any key to set MM-dd-yy date style
pause

:: force next style
reg add "HKCU\Control Panel\International" /v sShortDate /d MM-dd-yy /f >nul

:: prove it's changed
echo Check file's date now; it will be in MM-dd-yy format.
dir %0
echo Press any key to return date format to your preferred style.
pause

:: return to user's original setting
reg add "HKCU\Control Panel\International" /v sShortDate /d %OriginalsShortDate% /f >nul

:: prove it's back to normal
dir %0
echo Your original, presumably preferred, date style has been reset.
echo Give your Windows task bar some time to update.