2015-10-18 111 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

相關問題