2015-10-18 114 views
6

我想我已经咬掉了很多东西,而不是咀嚼。在CMD中重命名包含文件日期的文件

我是法庭记者,在明尼苏达法院系统工作。我们制定了一项新政策来提交我们的电子票据,因为许多记者不再打印纸质记录。不同品牌的报告机器创建具有不同命名约定的文件,并且我们希望将名称标准化,以便地区管理部门的人员可以在我们不在的时候轻松找到合适的注释。

因此,我们想要将FILE.001,FILE.002和20151018-082815.sgstn重命名为文件的创建日期。 sgstn文件当然有一个独特的名字,但创建FILE。*文件的无处不在的编写者确实需要重命名,而标准化将帮助所有人。我正在创建一个CMD文件,该文件也将调查法官的姓名和作家品牌,因此,任何从存储中拉出笔记的人都会发现他们正在寻找的内容:“2015-10-18 Judder Jones,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% 

,将返回YYYY-MM-DD或DM-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快捷方式上丢弃的文件?

最后,这是我的第一篇文章。所有建设性的批评都很乐意接受。认真。

- 蒂莫西J.麦高恩

编辑补充: 也许我已经被这个得太多。这是用户在注册表中用于调查日期格式的配置单元。我们应该能够从命令行写入我们自己的蜂巢;对?

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

我会报告回来,如果它的工作,但任何更多的意见是值得欢迎的!

+0

如果可以这样做,如果以vbscript或powershell或者几乎任何实际的编程语言实现,这将更加可靠。虽然你可以批量处理很多东西,但它并不是真正为此设计的。 (我特别建议vbscript和powershell主要是因为它们内置于Windows中。) –

+0

谢谢,Harry。还没有进展到VBScript或PowerShell。在PerfectScript中很容易,但我从来没有用过Word,只是WordPerfect。我怀疑我可以让整个政府部门使用不同的文字处理器。 :) –

回答

0

也许这不是一个完整的答案我问的问题,但它应该是我需要得到一个可预测的日期。

可以从注册表中保存用户的首选日期样式,强制要使用的日期样式,开展业务,然后返回用户的首选日期样式(假设他们不取消中间的批处理文件的运行)。

输出很混乱,但它只是证明了这个概念的作品。

@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. 
1

第一个想法:

使用分隔符来获得文件的日期或名或扩展

@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!) 
+0

谢谢,SachaDee。我正在去那里。 糟糕。不知道Enter会发布消息。 –

+0

当他们解释美元符号时,我就出来了。我没有在FOR帮助下看到它。接下来我会尝试SetLocal。 这个问题是,作为一个实验,我的系统日期设置为显示为d-M-yy。这使得今天18-10-15。搞砸了,是的,但我故意夸张。我通常使用yyyy-MM-dd,但大多数人使用dd-MM-yyyy。所以我需要解析当前用户的注册表以找出年份,月份和日期在他们的设置中,然后将文件重命名为yyyy-MM-dd加上其余。 –

+0

@ TimothyJ.McGowan - 这里的美元符号是没有意义的,只是变量名的一部分。 – SomethingDark

相关问题