2015-10-18 13 views
6

Tôi nghĩ rằng tôi đã cắn nhiều hơn tôi có thể nhai.Đổi tên tập tin với ngày của tập tin trong CMD

Tôi là phóng viên tòa án, làm việc trong hệ thống tòa án Minnesota. Chúng tôi đã phát triển một chính sách mới để gửi các ghi chú điện tử của chúng tôi, vì rất nhiều phóng viên không còn in ra giấy ghi chú nữa. Các nhãn hiệu máy báo cáo khác nhau tạo ra các tập tin với các quy ước đặt tên khác nhau và chúng tôi muốn chuẩn hóa tên để một người nào đó trong chính quyền huyện có thể tìm thấy các ghi chú phù hợp một cách dễ dàng nếu chúng tôi không ở xung quanh.

Vì vậy, chúng tôi muốn đổi tên FILE.001, FILE.002 và 20151018-082815.sgstn, ví dụ: thành ngày tệp được tạo. Các tập tin sgstn, tất nhiên, có một tên duy nhất, nhưng các nhà văn phổ biến mà tạo các tập tin FILE. * Thực sự cần đổi tên, và tiêu chuẩn hóa sẽ giúp tất cả. Tôi đang tạo một tập tin CMD cũng sẽ thăm dò ý kiến ​​của tên thẩm phán và thương hiệu nhà văn, vì vậy bất cứ ai kéo các ghi chú ra khỏi lưu trữ sẽ tìm thấy chính xác những gì họ đang tìm kiếm: "2015-10-18 Thẩm phán Jones, Stentura nhà văn. 001 "

Tôi đã tìm thấy rất nhiều giải pháp để đổi tên tệp với ngày và giờ của TODAY, nhưng chúng tôi muốn đổi tên chúng bằng ngày và giờ CỦA RIÊNG.

Tôi đang làm việc với tư cách người dùng chuẩn trong Windows 7 Pro và không có tùy chọn cài đặt phần mềm của bên thứ ba. Windows cho phép người dùng cá nhân để thiết lập phong cách ngày ưu tiên của họ, và dbenham và những người khác ở đây đã cho thấy tôi làm thế nào để có được phong cách mà từ registry:

:: 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% 

Điều đó sẽ trở yyyy-MM-dd hoặc DM-yy hoặc bất cứ người dùng đã chọn.

Và sau đó tôi có thể kiểm tra để xem những gì nội dung không có trong những phần khác nhau của chuỗi:

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% 

Nhưng đây là tất cả nhận được thật sự trở nên cồng kềnh, và tôi chỉ có một nửa sau khi một chất rắn 24 giờ đọc ở đây và ở nơi khác. Có thực sự không có cách nào trong Windows, tại dấu nhắc CMD hoặc trong bất kỳ công cụ dòng lệnh có sẵn, để có được ngày của một tập tin trong một định dạng dự đoán và sử dụng ngày đó?

Có thể bất cứ ai thương hại tôi và cung cấp cho chúng tôi một phương tiện ít cồng kềnh để tìm hiểu hệ thống cụ thể của người dùng nghĩ ngày tháng phải được định dạng và do đó đổi tên tất cả các tệp bị ngắt trên lối tắt CMD không?

Cuối cùng, đây là bài đăng đầu tiên của tôi ở đây. Tất cả những lời chỉ trích xây dựng sẵn sàng chấp nhận. Nghiêm túc.

- Timothy J. McGowan

Edited thêm: Có lẽ tôi đã overthinking này. Đó là tổ ong của người dùng trong sổ đăng ký Tôi đang bỏ phiếu cho định dạng ngày tháng. Chúng ta phải có khả năng viết thư cho tổ ong của mình từ dòng lệnh; đúng?

Vì vậy, tôi có thể đọc định dạng ngày ưa thích của người dùng, lưu định dạng đó vào biến, buộc định dạng ngày tôi muốn sử dụng, xử lý tệp và sau đó đặt lại định dạng ngày của người dùng. Đúng? Đáng để thử.

Tôi sẽ báo cáo lại nếu nó hoạt động, nhưng mọi nhận xét khác đều được hoan nghênh!

+0

Nếu có thể làm như vậy, điều này sẽ đáng tin cậy hơn nhiều nếu được thực hiện bằng vbscript hoặc powershell hoặc, tốt, khá nhiều bất kỳ ngôn ngữ lập trình thực tế nào. Trong khi bạn * có thể * làm rất nhiều thứ trong hàng loạt, nó không thực sự được thiết kế cho nó. (Tôi đề nghị VBScript và PowerShell đặc biệt chủ yếu là vì chúng được xây dựng trong Windows.) –

+0

Cảm ơn, Harry. Chưa tiến tới VBScript hoặc PowerShell. Facile trong PerfectScript, nhưng tôi chưa bao giờ sử dụng Word, chỉ cần WordPerfect. Và tôi nghi ngờ tôi có thể nói toàn bộ chi nhánh của chính phủ để sử dụng một trình xử lý văn bản khác. :) –

Trả lời

0

Có lẽ đây không phải là câu trả lời đầy đủ cho câu hỏi tôi đã hỏi, nhưng đó là tất cả những gì tôi cần để có được một ngày dự đoán được.

Có thể lưu kiểu ngày ưa thích của người dùng từ Registry, bắt buộc bạn muốn làm việc, tiến hành công việc kinh doanh của bạn và sau đó trả về kiểu ngày ưa thích của người dùng (giả sử họ không hủy tập tin batch ở giữa của chạy).

Kết quả là lộn xộn nhưng nó chỉ đơn giản là chứng minh khái niệm hoạt động.

@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

Một ý tưởng đầu tiên:

Sử dụng delimiters để có được những ngày tập tin hoặc tên hoặc gia hạn

@echo off 

setlocal enabledelayedexpansion 

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

EDIT Tôi

Để có được ngày trong 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

Cảm ơn, SachaDee. Tôi đã đến đó tiếp theo. Rất tiếc. Không biết Enter sẽ đăng thông báo. –

+0

Tôi đã ra ngoài khi họ giải thích dấu đô la. Tôi không thấy nó dưới sự giúp đỡ. Tôi sẽ thử SetLocal tiếp theo. Vấn đề với điều này là, như một thử nghiệm, tôi có ngày hệ thống của tôi được đặt để hiển thị là d-M-yy. Điều đó làm cho ngày hôm nay 18-10-15. Lộn xộn, vâng, nhưng tôi đang phóng đại mục đích. Tôi thường sử dụng yyyy-MM-dd, nhưng hầu hết mọi người sử dụng dd-MM-yyyy. Vì vậy, tôi cần phải phân tích cú pháp sổ đăng ký của người dùng hiện tại để tìm xem năm, tháng và ngày ở đâu trong thiết lập của họ và sau đó đổi tên tệp thành yyyy-MM-dd cộng với phần còn lại. –

+0

@ TimothyJ.McGowan - ký hiệu đô la ở đây là vô nghĩa và chỉ là một phần của tên biến. – SomethingDark

Các vấn đề liên quan