2009-02-22 58 views
15

Tôi cần phải viết một tệp dơi để tạo thư mục mới bằng cách sử dụng ngày và giờ hiện tại cho tên thư mục. Tôi đã đưa ra các thông tin sau:Tạo thư mục bằng cách sử dụng tập tin bat

for /f "tokens=1-3 delims=:," %%i in ("%TIME%") do md %DATE%-%%i.%%j.%%k 

Mã này có bất kỳ sai sót nào không? Có một cách tự nhiên dễ dàng hơn/nhiều hơn để làm điều đó?

+0

Nhân tiện, việc này tạo hai thư mục tại đây. Sử dụng dấu ngoặc kép (md "% DATE% - %% i. %% j. %% k") sẽ tốt hơn. – schnaader

Trả lời

23

Bạn có thể sử dụng một chuỗi con và được xây dựng trong% NGÀY% và% TIME% biến để làm điều này:

@echo OFF 

:: Use date /t and time /t from the command line to get the format of your date and 
:: time; change the substring below as needed. 

:: This will create a timestamp like yyyy-mm-dd-hh-mm-ss. 
set TIMESTAMP=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%-%TIME:~0,2%-%TIME:~3,2%-%TIME:~6,2% 

@echo TIMESTAMP=%TIMESTAMP% 

:: Create a new directory 
md "%1\%TIMESTAMP%" 
+0

đó là chính xác những gì tôi đang tìm kiếm, cách tiếp cận này có vẻ tự nhiên hơn với tôi – Yarik

+1

Rất hữu ích! Mặc dù, cần lưu ý rằng việc sử dụng mã ở trên giả định một tham số duy nhất: vị trí đích của thư mục mới. Nếu bạn sử dụng như vậy, bạn sẽ có một thư mục timestamped trong thư mục gốc của bất kỳ ổ đĩa nào bạn đã khởi chạy. – Brown

5

tôi sử dụng cây gậy này

for /F "tokens=1-4 delims=. " %%i in ('date /t') do (
set Day=%%i 
set Month=%%j 
set Year=%%k 
) 

for /F "tokens=1-4 delims=: " %%i in ('time /t') do (
set Hour=%%i 
set Minute=%%j 
set Second=%%k 
) 


md %1\%Year%-%Month%-%Day% 

Hy vọng nó giúp.

+0

Lưu ý rằng thời gian/t sẽ không hoạt động nếu các tiện ích mở rộng lệnh bị tắt, nhưng tôi đoán điều này không thực sự làm phiền bạn. (Xem http://www.pc1news.com/disabling-command-processor-extensions-824.html để tham khảo) – schnaader

+0

Tôi không biết nhiều về kịch bản lệnh dơi, tôi chỉ muốn dơi tạo thư mục có ngày hiện tại, nhưng cảm ơn bạn vì thông tin. – lopkiju

+0

Thứ hai cho vòng lặp không hiển thị giây trên máy tính của tôi, bởi vì thời gian/t đầu ra chỉ là 8:12 đối với tôi (không có giây). – Christian

0

Bạn đã thử chưa? Dòng lệnh của bạn ném một lỗi về phía tôi.

+0

Nếu bạn muốn chạy trực tiếp từ dòng lệnh thay vì tập tin batch, thay thế %% i bằng% i, sau đó nó sẽ hoạt động. – schnaader

+0

Tôi đã thử nó bên trong một tập tin bat. Nó dường như làm việc ổn. Khi bạn chạy nó từ dòng lệnh, bạn nên thay thế %% bằng%. cho/f "mã thông báo = 1-3 delims = :,"% i in ("% TIME%") làm md% DATE% -% i.% J.% K – Yarik

+0

đúng. cảm ơn schnaader và yarik. – dirkgently

1

tôi không thể nhận được rất nhiều những điều trên để làm việc, sử dụng các áp phích gốc lệnh thành công mặc dù.

Dưới đây là phiên bản của tôi:

for/f "tokens = 1-3 delims =: /".. %% i in ("% NGÀY%") làm thiết datestamp = %% i %% j% % k
@echo Directory sẽ được thực hiện với tên này:..
sao lưu @echo% datestamp%
md backup% datestamp%
@echo mục làm, bây giờ tiến hành sao chép tập tin ...
@echo hãy đảm bảo rằng PC không có E-mail hoặc bất kỳ tài liệu nào đang mở. .
tạm dừng
cd backup% datestamp%
md "Shared Documents"
xcopy "c: \ Documents and Settings \ All Users \ Documents \ documents" "Tài liệu được chia sẻ"/E/C/I/H/Q
@echo trong Tài liệu Hoàn thành.

vv :) ​​

0

đã bạn không chỉ cố gắng để làm cho một nhà sản xuất thư mục mới mới sử dụng ngày tháng và thời gian lưu lại dưới dạng new_folder_maker.bat với mã này

:start 
@echo off 
md new_folder_%date%_%time% 
exit 
+2

_have bạn không chỉ try_ mã của riêng bạn? Rõ ràng nó không thể làm việc, vì '% time%' chứa dấu hai chấm và ở một số quốc gia nhỏ ngày có dấu gạch chéo, cả hai đều không hợp lệ trong tên đường dẫn – jeb

+0

Thực tế nó phụ thuộc vào cài đặt Ngày và Giờ – bahrep

0

Đây là giải pháp của tôi (sửa đổi tắt của lopkiju) . Nó tạo ra một thư mục bằng cách sử dụng một dấu thời gian. Nếu một thư mục theo tên đó đã tồn tại, hãy thêm một số nguyên vào nó để làm cho nó trở thành duy nhất. Đặt điều này trong một tập tin .bat và vượt qua trong đường dẫn đến thư mục mẹ.
Đã kiểm tra trong Windows 7 Home Premium x64.

REM Create a folder using the current date. If such a folder already exists, append a number to make it unique. 
@ECHO OFF 
for /F "tokens=2-5 delims=/ " %%i in ('date /t') do (
set Day=%%j 
set Month=%%i 
set Year=%%k 
) 

set Path=%~1\%Year%-%Month%-%Day% 
set /a inx=2 

:LOOP 
IF NOT EXIST "%Path%" GOTO CREATE 
set Path=%~1\%Year%-%Month%-%Day% (%inx%) 
set /a inx+=1 
if %inx% gtr 9 goto :END REM Eh, giving up. 
goto LOOP 
:END 

:CREATE 
md "%Path%" 
:END 
+0

bạn có thể cung cấp tài nguyên giải thích từng bước, xin vui lòng? Tôi đã sử dụng trợ giúp trong dấu nhắc lệnh và hơi khó để theo dõi – Katana24

+0

dấu thời gian bao gồm giây. do đó, nó đã được bijective –

0

Bạn có thể tận dụng lợi thế của GNU sh-utils sử dụng date.exe 's định dạng specifiers:

for /f "delims=" %%a in ('date.exe +%%Y-%%m-%%d.%%H-%%M') do @set dd=%%a 
md %dd% 

Giải pháp này đặc biệt quan trọng cho những người có phiên bản địa hoá của Windows.

for vòng lặp chạy một lần, nhưng nó là cần thiết vì không có cách nào đơn giản hơn để gán một biến với giá trị được lấy từ đầu ra của lệnh.

Sử dụng date --help để biết danh sách đầy đủ các trình định dạng định dạng.

0

này hoạt động khá tốt cho tôi

dkdir foldername 

cd foldername 

dkdir %date% %time% 

cls 
1

Lý do tại sao một đơn giản% thời gian% không hoạt động là bởi vì nó ngăn cách bởi: mà không được phép trong kịch bản hàng loạt. Nhưng điều này sẽ hoạt động tốt:

Nó hoạt động rất tốt cho tôi.

Rem Get Day,Mth & Year from %Date% 
set Day=%Date:~0,2% 
set Mth=%Date:~3,2% 
set Yr=%Date:~6,4% 
REM Get Hour and Min from %Time% 
set Hour=%Time:~0,2% 
if "%hour:~0,1%" == " " set hour=0%hour:~1,1% 
set Min=%Time:~3,2% 

mkdir %date%-%hour%.%min% 
Các vấn đề liên quan