Vòng lặp do while trong các tập tin batch. echo Tập tin tồn tại

cho lệnh dưới dạng vòng lặp số

Lệnh for cho phép bạn tổ chức thực hiện các hành động lặp lại cùng loại. Bạn có thể sử dụng nó để hiển thị các số từ một đến mười, như trong danh sách sau.

for /l %%i in (1,1,10) thực hiện echo %%i

Biến tôi được gọi là bộ đếm vòng lặp. Do cú pháp độc đáo của lệnh, tên của bộ đếm vòng lặp phải bao gồm một chữ cái. Hơn nữa, nếu chúng ta đang viết một tệp bó, thì chúng ta cần đặt một dấu phần trăm kép trước tên của bộ đếm vòng lặp, nhưng nếu chúng ta chỉ gõ một lệnh trên dòng lệnh thì một lệnh duy nhất.

Logic của lệnh này như sau. Sau khi từ trong phạm vi thay đổi của bộ đếm vòng lặp được chỉ định. Trong phiên bản lệnh này, đây là bộ ba số: giá trị ban đầu của bộ đếm, bước đếm, giá trị giới hạn của bộ đếm. Khi thực thi một lệnh, đầu tiên shell sẽ gán biến Tôi giá trị 1, sau đó ở mỗi bước của vòng lặp, nó sẽ tăng thêm 1 cho đến khi vượt quá 10. Rõ ràng sẽ có mười bước như vậy. Nếu chúng ta chỉ định số 2 làm bước đếm thì vòng lặp sẽ thực hiện năm lần. Ở mỗi bước của vòng lặp, phần thân của vòng lặp được viết sau từ được thực thi LÀM . Trong ví dụ đã cho, lệnh là tiếng vọng , hiển thị giá trị hiện tại của bộ đếm vòng lặp.

cho lệnh lặp qua các tập tin

Thông thường, lệnh for được sử dụng để duyệt và xử lý các tệp. Phải nói rằng trong những trường hợp khá đơn giản, việc xử lý tệp hàng loạt được thực hiện bằng ký tự đại diện. Nếu chúng ta muốn thay thế tất cả các tệp trong thư mục hiện tại bằng phần mở rộng.htm sang .html , chúng ta nhập lệnh ren *.htm *.html . Nhưng nếu điều tương tự cần được thực hiện không phải trong một thư mục mà trong cây thư mục, thì không cần lệnhkhông đủ. Tệp bó bên dưới thực hiện thao tác này cho tất cả các tệp htm trong thư mục con trang mạng thư mục hiện hành. Chính xác hơn là trong toàn bộ cây thư mục nằm bên trong trang web.

for /r website %%i in (*.htm) do ren %%i %%~ni.html

Chìa khóa /r cho biết sự cần thiết phải duyệt qua thư mục trang mạng và tất cả những gì bên trong nó. Nếu bạn không chỉ định nó (nhưng sau đó bạn không được phép chỉ định thư mục), thì chỉ các tệp trong thư mục hiện tại mới được xử lý. Phạm vi giá trị cho bộ đếm vòng lặp trong phiên bản lệnh này là tập hợp tất cả các tệp có phần mở rộng .htm nằm bên trong thư mục (chính xác hơn là cây) của trang web. Một mục lạ thoạt nhìn~ni có nghĩa là từ giá trị của biến Tôi Bạn chỉ cần chọn tên tập tin. Ngôn ngữ lệnh MS-DOS cung cấp một số công cụ sửa đổi như vậy, ví dụ như viết~xi biểu thị phần mở rộng của tập tin. Tất cả các sửa đổi được mô tả trong trợ giúp lệnh vì .

Phần thân của vòng lặp có thể bao gồm một số lệnh được đặt trong dấu ngoặc đơn.

@echo tắt

cho /r trang web %%i trong (*.htm) làm (

Rem In tên tập tin

Tiếng vọng %%i

Rem Đổi tên tập tin

Ren %%i %%~ni.html

Tìm kiếm thư mục

Cách lệnh for lặp qua các tệp trong một thư mục, nó không thể lặp qua các thư mục trong thư mục mong muốn (tức là nó chỉ nhìn thấy các tệp). Bạn cần sử dụng một cú pháp khác.

đối với /r "C:\test" /d %%i in (*) do (

Echo Tên thư mục: %%i

Hoặc bằng cách lọc đầu ra của lệnh dir:

for /f "delims=" %%i in (dir /b /s /a:d "C:\test") làm (

Echo Tên thư mục: %%i

Sao chép D:\filesKLIENT\Kontragent\111.grs "%%i"

Trong bài viết này, chúng ta sẽ xem xét cách sử dụng cấu trúc for trên dòng lệnh để lặp lại các giá trị và tệp. Tôi sẽ đưa ra tất cả các ví dụ trong bài viết có tính đến việc mã sẽ được thực thi trong phần nội dung của tập lệnh, do đó, mã này sẽ được khởi chạy từ bảng điều khiển dòng lệnh.

Cá nhân tôi lần đầu tiên thêm nó vào biến môi trường CON ĐƯỜNGđường dẫn đến thư mục chứa tập lệnh:

Sau đó, tôi chỉ cần nhập tên script vào cửa sổ console, ví dụ test.bat. Hãy nhớ rằng đường dẫn sẽ chỉ được lưu trữ trong biến môi trường trong cửa sổ nhắc lệnh hiện tại.

Dòng lệnh cho – lặp qua các giá trị

Để lặp lại các giá trị, hãy sử dụng cú pháp sau:

cho /L %% biến trong (bắt đầu, bước, kết thúc) do (toán tử)

Chìa khóa /L cho biết dữ liệu đang được sắp xếp, theo sau là tên của biến mà dữ liệu này sẽ được ghi vào. Bạn cần chỉ định ba tham số trong ngoặc đơn, cách nhau bằng dấu phẩy:

  • Bắt đầu- giá trị ban đầu
  • bước chân– ở đây chúng tôi chỉ ra mức độ chúng tôi cần tăng hoặc giảm giá trị ban đầu ở mỗi lần lặp. Nghĩa là, nếu tham số chứa số âm thì sẽ giảm, nếu không thì tham số “bắt đầu” sẽ tăng.
  • kết thúc– ở đây bạn cần chỉ định giá trị cuối cùng, chính giá trị này sẽ quyết định có kết thúc vòng lặp hay không. Nghĩa là, tại mỗi lần lặp, các tham số đầu tiên và cuối cùng được so sánh.

Hãy xem ví dụ này:

@ echo off for / L %% B in (0 ,1 ,5 ) làm echo %% B echo. for / L %% B in (5 ,-1 ,0 ) do echo %% B

Tập lệnh này sử dụng hai vòng lặp for trên dòng lệnh, vòng lặp đầu tiên chỉ định phạm vi các chữ số từ 0 đến 5 trong các bước 1, vòng lặp thứ hai chỉ định phạm vi các chữ số từ 5 đến 0 trong các bước -1. Đó là, thứ tự trực tiếp và ngược lại. Hàm ECHO sẽ hiển thị nội dung của biến B dưới dạng danh sách. chèn một dòng trống giữa các danh sách.

Bây giờ chúng ta hãy thử tìm tổng các số từ 0 đến 100:

@ echo off set summ =0 for / L %% B in (0 ,1 ,100 ) do set/ A summ+=%% B echo % summ% set summ =

Đầu tiên chúng tôi vô hiệu hóa đầu ra tiếng vang. Sau đó chúng ta khai báo biến summ bằng từ khóa set và gán nó bằng 0. Tiếp theo trong vòng lặp for, chúng ta đặt giá trị ban đầu là 0, bước là 1 và giá trị cuối cùng là 100. Phép tính tổng xảy ra trong dòng tập/A tổng+=%%B, ở đây nội dung của biến %%B sẽ được thêm vào nội dung của biến tổng. Cuối cùng, chúng tôi in kết quả cuối cùng và xóa tổng hợp khỏi môi trường.

Bây giờ hãy xem đoạn mã tìm giai thừa của 5 trông như thế nào:

@ echo off set Fact =1 for / L %% B in (5 ,-1 ,1 ) do set/ A Fact* =%% B echo % Fact% set Fact =

Cú pháp ở đây gần như giống nhau, ngoại trừ việc chúng tôi đã chỉ định một bước phủ định và sử dụng toán tử *=.

Được rồi, bây giờ chúng ta hãy phức tạp hóa vấn đề: tìm tổng các số từ 0 đến 10, loại trừ các số 5, 7 và 9 khỏi phép tính:

@ echo off set summ =0 for / L %% B in (0 ,1 ,10 ) do (if "%%B" neq "5" (if "%%B" neq "7" (if "%%B " neq "9" set/ A summ+=%% B) ) ) echo % summ% set summ =

Như bạn có thể thấy, chúng tôi đã sử dụng câu lệnh if có điều kiện để kiểm tra điều kiện. Thật không may, không có toán tử logic nào như “OR” và “AND” trên dòng lệnh, chẳng hạn như trong các ngôn ngữ và, vì vậy chúng tôi phải tạo các câu lệnh if lồng nhau. Kết quả là chúng ta nhận được số 34. Ngoài ra, hãy chú ý đến toán tử “ neq” – kiểm tra điều kiện thuộc loại “KHÔNG BẰNG”.

Dòng lệnh để – làm việc với tập tin

Để làm việc với các tệp theo nhóm, hãy sử dụng dòng lệnh sau cho cú pháp vòng lặp:

đối với biến % trong (fileset) do (toán tử)

Tham số cơ bản ở đây là biến file_set, có thể chứa:

  • tập tin riêng biệt, ví dụ my_file.txt
  • một nhóm tài liệu được chỉ định thông qua một mẫu, ví dụ: *.txt
  • một danh sách các tệp, được phân tách bằng dấu cách và mỗi thành phần của danh sách cũng có thể chứa một mẫu, ví dụ: my_file.txt *.doc my*.avi

Điều đáng lưu ý là nếu bạn không chỉ định đường dẫn đến tệp, việc tìm kiếm sẽ được thực hiện trong thư mục hiện tại - trong thư mục mà tập lệnh được khởi chạy.

Ví dụ sau xuất ra tất cả các tệp từ thư mục d:\work\ có phần mở rộng .txt:

@ echo off for %% B in (d:\work\* .txt) do (echo %% B)

Ở đây B là biến khởi tạo, tại mỗi lần lặp nó sẽ được gán đường dẫn, tên và phần mở rộng của tài liệu văn bản tìm được, đồng thời hàm ECHO sẽ hiển thị ngay thông tin trên màn hình. Sau đó, biến B sẽ được đặt tên mới và dữ liệu sẽ được xuất lại. Vòng lặp tự chạy cho đến khi tìm thấy tất cả các giá trị được chỉ định trong điều kiện.

Đương nhiên, bạn có thể đặt điều kiện để hiển thị tất cả các tệp có phần mở rộng, ví dụ: .txt, .avi và .pdf.

@ echo off set work_dir =d:\work for %% B in (%work_dir% \* .txt %work_dir% \* .avi %work_dir% \* .pdf) do (echo %% B) set work_dir =

Trong trường hợp này, biến work_dir chứa đường dẫn đến thư mục d:\work; trong dòng lệnh for, chúng ta thêm các phần mở rộng cần thiết vào biến. Ở cuối tập lệnh, biến work_dir sẽ bị xóa.

Cũng cần hiểu rằng thay vì một toán tử (trong trường hợp này là tiếng vang), bạn có thể viết nhiều toán tử, nhóm chúng bằng ký hiệu &. Nghĩa là, chu trình này cho phép bạn xử lý nhiều tệp cùng một lúc theo cách nhóm. Chỉ cần nhớ rằng khi thành lập một nhóm, họ phải được đặt trong dấu ngoặc đơn. Ví dụ:

Bạn có thể thử lấy danh sách tên tệp và kích thước của chúng:

Đội được sử dụng để thực thi lệnh được đưa ra dưới dạng tham số cho từng phần tử trong tập hợp. Các tập tin, thư mục và tập hợp các chuỗi có thể được sử dụng làm phần tử.

Định dạng dòng lệnh:

FOR % biến IN (bộ) Lệnh DO [tham số]

Tùy chọn:

%Biến đổi- Tham số thay thế bằng một chữ cái.

(bộ dụng cụ)- Xác định một tập hợp bao gồm một hoặc nhiều phần tử được xử lý bằng lệnh.

đội- Lệnh thực hiện cho từng phần tử của tập hợp.

tùy chọn- Các tham số cho lệnh được thực thi liên quan đến các phần tử của tập hợp.

Trong các tệp bó, lệnh FOR được viết dưới dạng

%%Biến đổi thay vì %Biến đổi. Tên biến có phân biệt chữ hoa chữ thường (%i khác với %I).

Các dạng bổ sung của lệnh FOR cũng được hỗ trợ:

FOR /D % biến IN (bộ) lệnh DO [tham số]

Công tắc /D chỉ định tên thư mục (không phải tên tệp) dưới dạng một tập hợp.

FOR /R [[drive:]path] %variable IN (set) DO command [tham số]

Công tắc /R chỉ định việc thực thi lệnh cho thư mục [drive:]path, cũng như cho tất cả các thư mục con của đường dẫn này. Nếu khóa chuyển /R không có tên thư mục theo sau thì thư mục hiện tại sẽ được sử dụng. Nếu tập hợp là một ký tự dấu chấm (.), lệnh chỉ liệt kê cây thư mục.

FOR /L % biến IN (bắt đầu, bước, kết thúc) Lệnh DO [tham số]

Phím /L chỉ định việc xử lý một tập hợp các chuỗi số có phần đầu, phần cuối và số gia được chỉ định. Do đó, tập hợp (1,1,5) được mở rộng thành (1 2 3 4 5) và tập hợp (5,-1,1) - thành (5 4 3 2 1)

FOR /F ["phím"] % biến IN (tập tin) Lệnh DO [tùy chọn]

FOR /F ["tùy chọn"] % biến IN ("chuỗi") Lệnh DO [tùy chọn]

FOR /F ["switches"] %variable IN ("lệnh") Lệnh DO [tùy chọn]

Khóa chuyển /F chỉ định việc xử lý tệp, giá trị chuỗi hoặc đầu ra tiêu chuẩn của lệnh khác. Một tập hợp các tệp chứa tên của một hoặc nhiều tệp được mở, đọc và xử lý lần lượt. Quá trình xử lý bao gồm đọc một tệp, chia nó thành các dòng văn bản riêng lẻ và phân tích từng dòng thành 0 hoặc nhiều chuỗi con. Sau đó, phần thân của vòng lặp "for" được gọi, trong đó mỗi chuỗi con được tìm thấy sẽ được sử dụng làm giá trị của một biến. Theo mặc định, khóa chuyển đổi /F trích xuất chuỗi con được phân tách bằng dấu cách đầu tiên từ mỗi dòng của mỗi tệp. Các dòng trống trong tập tin sẽ bị bỏ qua. Tham số "khóa" tùy chọn được sử dụng để ghi đè các quy tắc phân tích cú pháp mặc định. Đó là một chuỗi trích dẫn chứa một hoặc nhiều từ khóa để xác định các tham số phân tích cú pháp. Từ khóa:

eol=ký tự- dấu đầu dòng chú thích ở cuối dòng (dấu cuối dòng dữ liệu đã xử lý). Được chỉ định là một ký tự đơn.

bỏ qua=n- số dòng bị bỏ qua trong quá trình xử lý tính từ đầu tập tin.

delims=xxx- một tập hợp các dấu phân cách giữa các phần tử dòng được xử lý. Theo mặc định, dấu cách và tab được sử dụng làm dấu phân cách.

mã thông báo=x,y,m-n- số lượng chuỗi con từ mỗi dòng, được chuyển vào phần thân của vòng lặp "for" cho mỗi lần lặp. Ví dụ: đối với một tệp văn bản thông thường, chuỗi con sẽ là các từ và dấu phân cách chuỗi con sẽ là dấu cách hoặc tab. Khi sử dụng phím này, tên biến bổ sung sẽ được tô sáng. Định dạng m-nđại diện cho một loạt các chuỗi con được đánh số từ m đến n. Nếu ký tự cuối cùng trong dòng mã thông báo= là dấu hoa thị, một biến bổ sung được tạo có giá trị sẽ là tất cả văn bản còn lại trong dòng sau khi phân tích chuỗi con cuối cùng.

sử dụng lạiq- chế độ xử lý báo giá. Chuỗi được đặt trong dấu ngoặc kép được thực thi dưới dạng lệnh, chuỗi được đặt trong dấu ngoặc đơn thẳng là chuỗi ký tự và dấu ngoặc kép có thể được sử dụng để chỉ định tên tệp có chứa dấu cách.

Một ví dụ minh họa:

FOR /F "eol=; token=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

Tệp myfile.txt đang được phân tích cú pháp. Tất cả các dòng bắt đầu bằng dấu chấm phẩy (eol=;) đều bị bỏ qua. Chuỗi con thứ hai và thứ ba từ mỗi dòng (tokens=2,3) được chuyển vào phần nội dung của vòng lặp "for", với các chuỗi con được phân tách bằng dấu phẩy và/hoặc dấu cách. Trong thân vòng lặp có một biến %Tôi lấy giá trị của chuỗi con thứ hai, %j- thứ ba, và %k- toàn bộ trường còn lại cho đến hết dòng sau chuỗi con thứ ba. Tên tệp chứa khoảng trắng phải được đặt trong dấu ngoặc kép. Để sử dụng dấu ngoặc kép, bạn phải sử dụng tùy chọn usebackq, nếu không, dấu ngoặc kép sẽ được hiểu là xác định một chuỗi ký tự cần phân tích cú pháp.

Trong ví dụ này, biến %Tôiđược khai báo rõ ràng trong câu lệnh "for" và các biến %j%kđược khai báo ngầm bằng cách sử dụng khóa mã thông báo=. Chìa khóa mã thông báo= cho phép bạn trích xuất tối đa 26 chuỗi con từ một dòng của tệp. Hãy nhớ rằng tên biến FOR là chữ cái duy nhất, phân biệt chữ hoa chữ thường, do đó, không quá 52 biến có thể hoạt động cùng lúc, rõ ràng hoặc ngầm định.

Đội CHO /F cũng có thể được sử dụng để xử lý một chuỗi được chỉ định rõ ràng, được đặt trong dấu ngoặc đơn và được đưa ra dưới dạng tham số trong ngoặc đơn. Nó sẽ được phân tích cú pháp giống như cách đọc một dòng từ tệp đầu vào.

Đầu ra (dữ liệu đầu ra) của lệnh khác cũng có thể được sử dụng làm tập hợp được xử lý. Trong trường hợp này, nó được sử dụng làm tham số trong ngoặc đơn chuỗi ở dấu backticks. Dòng này được chuyển đến trình xử lý lệnh con CMD.EXE để thực thi và đầu ra của lệnh này được lưu trong bộ nhớ và được phân tích cú pháp như thể nó là một tệp. Ví dụ:

FOR /F "usebackq delims==" %i IN (`set`) LÀM @echo %i,

Lệnh đang chạy BỘ, hiển thị các giá trị và lệnh của biến môi trường CHO /F sẽ liệt kê chúng bằng lệnh tiếng vọng .

Trong một nhóm Có thể sử dụng tham chiếu đến các biến. Các cấu trúc cú pháp sau đây được cho phép:

%~tôi- dấu ngoặc kép xung quanh (") được xóa khỏi biến %I
%~fI- biến %I được mở rộng thành tên file đầy đủ
%~dI- từ biến %I, chỉ có tên đĩa được trích xuất
%~pI- từ biến %I chỉ chọn đường dẫn tới file
%~nTôi- từ biến %I chỉ trích xuất tên file
%~xI- phần mở rộng tên file được trích xuất từ ​​biến %I
%~sI- đường dẫn kết quả chỉ chứa tên ngắn
%~aI- biến %I được mở rộng thành thuộc tính tệp
%~tI- biến %I được mở rộng đến ngày/giờ của tệp
%~zI- biến %I được mở rộng theo kích thước tệp
%~$path:Tôi con đường, và biến %TÔIđược thay thế bằng tên đầy đủ của tệp đầu tiên được tìm thấy. Nếu biến con đường không được xác định hoặc không tìm thấy tệp nào do tìm kiếm, thì công cụ sửa đổi này được thay thế bằng một chuỗi trống.

Khi bạn kết hợp nhiều câu lệnh, bạn có thể nhận được kết quả sau:

~dpI- biến I mở rộng thành tên ổ đĩa và đường dẫn
~nxI- biến I được mở rộng thành tên tệp và phần mở rộng của nó
~fsI- biến I được mở rộng thành đường dẫn đầy đủ với tên viết tắt
~dp$path:Tôi- tìm kiếm thông qua các thư mục được chỉ định trong biến môi trường con đường, và biến TÔI mở rộng sang tên ổ đĩa và đường dẫn đến tệp đầu tiên được tìm thấy.
~ftzaI- biến I được mở rộng thành một chuỗi tương tự như chuỗi được tạo bởi lệnh DIR

Trong các ví dụ trên, các biến TÔIcon đường có thể được thay thế bằng các giá trị hợp lệ khác. Cấu trúc cú pháp với các ký hiệu ~ kết thúc bằng tên biến vòng lặp FOR hợp lệ.

Khi sử dụng lệnh trong các tệp bó, nếu có nhiều hơn một lệnh cần được thực thi trong một vòng lặp, chúng sẽ được đặt trong dấu ngoặc đơn:

CHO % biến IN (bộ) LÀM (
lệnh1 [tham số]
đội2
. . .
)

@echo TẮT
cho /L %%I trong (1,1,5) DO (
echo FIRST%%I
ECHO CUỐI CÙNG%%I
)

Thông thường, trong các tệp bó, lệnh được sử dụng không chỉ để phân tích dữ liệu mà còn để xử lý dữ liệu, việc này đòi hỏi phải sử dụng các biến bên trong vòng lặp . Và ở đây có một vấn đề phát sinh - giá trị của các biến không thay đổi, tức là. chúng không thể được sử dụng bên trong dấu ngoặc. Hiện tượng này không phải do tiền đề logic mà chỉ do một số tính năng nhất định trong quá trình triển khai bộ xử lý lệnh CMD.EXE và điều này phải được tính đến khi xử lý các biến bên trong vòng lệnh FOR và IF. Nói cách khác, việc sử dụng các giá trị biến bên trong dấu ngoặc đơn đòi hỏi phải thay đổi chế độ diễn giải mặc định của shell. Các nhà phát triển cung cấp khả năng khởi chạy CMD.EXE với tham số /V:BẬT, cho phép mở rộng lười biếng các biến môi trường bằng cách sử dụng ký tự dấu chấm than ( ! ) làm dấu phân cách. Nghĩa là, tham số /V:ON cho phép sử dụng !var! dưới dạng giá trị biến var trong quá trình thực thi bên trong các vòng lệnh NẾU NHƯ. Nhưng trong thực tế, khả năng kích hoạt cục bộ chế độ này trong tệp lệnh bằng một lệnh đặc biệt thường được sử dụng:

Sau đó, bạn có thể xử lý các giá trị mà các biến bên trong vòng lặp nhận được bằng cách sử dụng dấu chấm than thay vì dấu phần trăm. Về mặt cú pháp, việc sử dụng cả hai dấu phân cách đều được cho phép, nhưng kết quả của việc sử dụng chúng sẽ khác nhau, như được minh họa rõ ràng bằng tệp bó sau:


@ECHO TẮT
đặt VAR=trước
if "%VAR%" == "trước" (
đặt VAR=sau
nếu "!VAR!" == "sau" @echo Với dấu phần trăm=%VAR% , Với dấu chấm hỏi=!VAR!
)

Đội đặt VAR=sauđược thực thi bên trong một chương trình con được phân cách bằng dấu ngoặc đơn và nếu lệnh bị loại bỏ Setlocal EnableDelayedExpansion hoặc không sử dụng để lấy giá trị của một biến VAR dấu chấm than, giá trị của nó sẽ vẫn cũ (giá trị đã được đặt trước khi vào vòng lệnh ).

Tính năng này của việc triển khai bộ xử lý lệnh Windows thường dẫn đến kết quả không mong muốn khi sử dụng các nhóm lệnh được hợp nhất bằng dấu ngoặc đơn trong cấu trúc NẾU NHƯ và khi giá trị của bất kỳ biến nào được thay đổi trong một vòng lặp lệnh đơn. Ví dụ: để lấy danh sách các tệp trong thư mục hiện tại, tệp bó như vậy sẽ không hoạt động:

đặt DANH SÁCH=
đối với %%i trong (*) hãy đặt LIST=%LIST% %%i
tiếng vang %LIST%

Có vẻ như mọi thứ đều đúng về mặt logic, nhưng tính đặc thù của việc xử lý các giá trị biến không được tính đến. Giá trị biến DANH SÁCH bên trong một vòng lệnh sẽ không bị thay đổi, nó sẽ vẫn trống (được thiết lập bởi lệnh SET LIST=), giống như khi bắt đầu vòng lặp FOR. Đội DANH SÁCH THIẾT LẬP= %LIST% %%I phải thay đổi giá trị của biến LIST trong mỗi vòng lặp thành biến hiện tại, cộng với ký tự khoảng trắng và cộng với giá trị hiện tại của biến TÔI, lấy giá trị của tên tệp trong thư mục hiện tại. Về mặt cú pháp, lệnh này đúng, nhưng do tính năng triển khai nêu trên của bộ xử lý lệnh nên nó không hoạt động và giá trị của biến LIST không thay đổi. Để điều này xảy ra, tệp bó phải được sửa đổi theo cách tương tự như trong ví dụ về một nhóm lệnh:

Setlocal EnableDelayedExpansion
đặt DANH SÁCH=
với %%i trong (*) hãy đặt LIST=!LIST! %%Tôi
tiếng vang %LIST%

Lúc này giá trị của biến DANH SÁCH bên trong một vòng lặp sẽ thay đổi, tuần tự nhận các giá trị các tên file cách nhau bởi dấu cách ( đặt LIST=!LIST! %%Tôi).

Tính năng này của việc triển khai CMD cũng phải được tính đến khi sử dụng các giá trị của biến hệ thống bên trong các vòng lặp, chẳng hạn như biến ERRORLEVEL:

NẾU !ERRORLEVEL!==0 thay vì %ERRORLEVEL%==0

Chạy một số lệnh cho mỗi tệp từ một bộ nhất định.

Cú pháp

{% Biến đổi|%% Biến đổi} TRONG(một loạt) LÀM đội [Tùy chọn dòng lệnh]

Tùy chọn

{% Biến đổi|%% Biến đổi) Tham số bắt buộc. Tham số được thay thế Sử dụng % Biến đổiđể thực hiện lệnh từ dòng lệnh. Sử dụng %% Biến đổiđể thực hiện lệnh trong một tập tin hàng loạt. Các biến có phân biệt chữ hoa chữ thường và có thể được biểu thị bằng giá trị alpha, chẳng hạn như %A, %B hoặc %C. (một loạt) Tham số bắt buộc. Chỉ định một hoặc nhiều tệp, thư mục, phạm vi giá trị hoặc chuỗi văn bản sẽ được xử lý bằng lệnh đã chỉ định. Dấu ngoặc đơn là bắt buộc. lệnh Tham số bắt buộc. Chỉ định một lệnh sẽ được thực thi cho từng tệp, thư mục phạm vi giá trị hoặc chuỗi văn bản có trong tham số đã chỉ định (một loạt) . CommandLineOptions Chỉ định các tùy chọn dòng lệnh được sử dụng với lệnh đã chỉ định. /? Hiển thị trợ giúp trên dòng lệnh.

Ghi chú

  • Sử dụng chương trình

    Đội có thể được sử dụng trong một tệp bó hoặc trực tiếp từ dòng lệnh.

  • Sử dụng tùy chọn dòng lệnh tệp hàng loạt

    Các thuộc tính sau đây áp dụng cho lệnh .

    • Trong một nhóm Biến đổi %% Biến đổi(hoặc %% Biến đổi) sẽ được thay thế bằng chuỗi văn bản từ tham số đã cho một loạt, trong khi tham số đội sẽ không xử lý tất cả các tập tin trong bộ này.
    • Tên tham số Biến đổiđội Chúng phân biệt chữ hoa chữ thường, mang tính toàn cục và không quá 52 biến có thể hoạt động cùng một lúc.
    • Để chỉ ra một tham số Biến đổi Bạn có thể sử dụng bất kỳ ký tự nào ngoại trừ số 09 để không xung đột với tham số của file batch %0 %9 . Đối với các tệp bó đơn giản, một ký hiệu ký tự đơn là đủ, ví dụ: %%f.
    • Trong các tệp bó phức tạp, các ký hiệu khác cho tham số có thể được sử dụng. Biến đổi.
  • Chỉ định nhiều tệp

    Tham số một loạt có thể đại diện cho một nhóm tệp hoặc một số nhóm tệp. Bạn có thể sử dụng ký tự đại diện (* và ?) để chỉ định các nhóm tệp. Các bộ tệp sau đây hợp lệ:

    (*.doc *.txt *.me)

    (jan*.doc jan*.rpt feb*.doc feb*.rpt)

    (ar??1991.* ap??1991.*)

    Khi nào nên sử dụng lệnh , giá trị đầu tiên trong tham số một loạt thay thế tham số %% Biến đổi(hoặc % Biến đổi), sau đó lệnh đã chỉ định sẽ được thực thi để xử lý giá trị đó. Điều này tiếp tục cho đến khi tất cả các tệp (hoặc nhóm tệp) khớp với giá trị tham số đã được xử lý một loạt.

  • Sử dụng từ khóa TRONGLÀM

    TRONGLÀM không phải là tham số nhưng chúng cần thiết để lệnh hoạt động . Nếu thiếu bất kỳ từ nào, thông báo lỗi sẽ hiển thị trên màn hình.

  • Sử dụng các mẫu lệnh bổ sung

    Nếu tiện ích mở rộng shell được bật (theo mặc định), các dạng lệnh bổ sung sau sẽ được hỗ trợ .

    • Chỉ danh mục

      Nếu tham số một loạt chứa các ký tự đại diện (* và ?), lệnh được chỉ định trong tham số đội, được thực thi cho từng thư mục (ngoại trừ nhiều tệp trong thư mục được chỉ định) khớp với tham số một loạt. Cú pháp sau đây được sử dụng.

      /D {%% | % } Biến đổi TRONG (một loạt) LÀM đội [Tùy chọn dòng lệnh]

    • đệ quy

      Duyệt cây thư mục có gốc tại [ đĩa: ]con đường, Tuân theo chỉ dẫn cho mỗi thư mục trong cây. Nếu sau phím /R không có thư mục nào được chỉ định, thư mục hiện tại được giả định. Nếu tham số một loạtđược chỉ định bởi một dấu chấm (.), lệnh sẽ chỉ liệt kê các thư mục trong cây. Cú pháp sau đây được sử dụng.

      /R [[đĩa : ]con đường] {%% | % } Biến đổi TRONG(một loạt) LÀM đội [Tùy chọn dòng lệnh]

    • Lặp lại một loạt các giá trị

      Sử dụng biến lặp để đặt giá trị ban đầu ( Giá trị ban đầu#), rồi di chuyển qua phạm vi giá trị cho đến khi giá trị vượt quá giá trị cuối của tập hợp ( Giá trị cuối cùng#). /L sẽ lặp lại bằng cách so sánh tham số Giá trị ban đầu# với tham số Giá trị cuối cùng#. Nếu tham số Giá trị ban đầu# nhỏ hơn tham số Giá trị cuối cùng#, sau đó lệnh được thực thi. Khi biến lặp vượt quá tham số Giá trị cuối cùng#, shell thoát khỏi vòng lặp. Bạn cũng có thể sử dụng tham số âm bước chân#để di chuyển qua một phạm vi các giá trị giảm dần. Ví dụ: (1,1,5) tạo ra chuỗi "1 2 3 4 5" và (5,-1,1) tạo ra chuỗi "5 4 3 2 1". Cú pháp sau đây được sử dụng.

      /L {%% | % } Biến đổi TRONG (Giá trị bắt đầu#,Bước#,Giá trị cuối cùng#) LÀM đội [Tùy chọn dòng lệnh]

    • Lặp lại và phân tích các tập tin

      Phân tích cú pháp tệp nên được sử dụng để xử lý đầu ra lệnh, chuỗi và nội dung tệp. Sử dụng các biến lặp để xác định nội dung hoặc hàng bạn muốn kiểm tra. Tham số Từ khóaPhân tích cú phápđược sử dụng để thay đổi phân tích cú pháp. Sử dụng tham số Từ khóaPhân tích cú phápđiểm đánh dấu để chỉ định các điểm đánh dấu được coi là các biến lặp. Ghi chú. Không có phím tham số điểm đánh dấu /F chỉ kiểm tra mã thông báo đầu tiên.

      Phân tích tệp bao gồm đọc đầu ra, dòng hoặc nội dung của tệp, chia tệp thành các dòng văn bản riêng lẻ và phân tích từng dòng thành số 0 hoặc mã thông báo. Chu kỳ chương trình sau đó được gọi với biến lặp được đặt thành điểm đánh dấu. Mặc định /F chuyển phần tử được phân tách bằng dấu cách đầu tiên từ mỗi dòng của mỗi tệp. Các dòng trống được bỏ qua. Một cú pháp khác cũng được sử dụng.

      /F [" Từ khóaPhân tích cú pháp" ] {%% | % } Biến đổi TRONG(Nhiều tên tệp) LÀM đội [Tùy chọn dòng lệnh]

      /F [" Từ khóaPhân tích cú pháp" ] {%% | % } Biến đổi TRONG("Chuỗi ký tự") LÀM đội [Tùy chọn dòng lệnh]

      /F [" Từ khóaPhân tích cú pháp" ] {%% | % } Biến đổi TRONG("đội") LÀM đội [Tùy chọn dòng lệnh]

      Lý lẽ Nhiều tên tệp chỉ định một hoặc nhiều tên tệp. Mỗi tệp được mở, đọc và xử lý trước khi chuyển sang tệp tiếp theo trong đối số Nhiều tên tệp. Để ghi đè hành vi phân tích cú pháp mặc định, hãy chỉ định tham số " Từ khóaPhân tích cú pháp" . Đây là một chuỗi trích dẫn có chứa một hoặc nhiều từ khóa để biểu thị các chế độ phân tích cú pháp khác nhau.

      Nếu usebackq được sử dụng, hãy sử dụng một trong các cú pháp sau:

      /F [" sử dụng lạiqTừ khóaPhân tích cú pháp" ] {%% | % } Biến đổi TRONG ("Nhiều tên tệp") LÀM đội [Tùy chọn dòng lệnh]

      /F [" sử dụng lạiqTừ khóaPhân tích cú pháp" ] {%% | % } Biến đổi TRONG("Chuỗi ký tự") LÀM đội [Tùy chọn dòng lệnh]

      /F [" sử dụng lạiqTừ khóaPhân tích cú pháp" ] {%% | % } Biến đổi trong(`đội`) LÀM đội [Tùy chọn dòng lệnh]

      Bảng dưới đây liệt kê các từ khóa phân tích được sử dụng cho tham số Từ khóaPhân tích cú pháp.

      Từ khóa Sự miêu tả
      eol=c Chỉ định ký tự cuối dòng (chỉ một ký tự).
      bỏ qua=n Đặt số dòng cần bỏ qua ở đầu tệp.
      delims=xxx Chỉ định một tập hợp các dấu phân cách. Thay thế bộ phân cách mặc định của dấu cách và tab.
      mã thông báo=x,y,m-n Chỉ định các phần tử được truyền từ mỗi dòng vào thân vòng lặp ở mỗi lần lặp. Kết quả là, tên biến bổ sung được đặt. Hình thức m-n chỉ định một phạm vi chỉ ra các phần tử với tôi quần què N-quần què. Nếu ký tự cuối cùng của dòng mã thông báo= là dấu hoa thị (*), sau đó một biến bổ sung được đặt vào đó phần còn lại của dòng được đặt sau khi phân tích phần tử cuối cùng.
      sử dụng lạiq Chỉ định xem có thể sử dụng dấu ngoặc kép cho tên tệp trong tham số hay không Nhiều tên tệp. Chỉ định rằng các chuỗi nằm trong dấu ngoặc kép được thực thi dưới dạng lệnh và các chuỗi nằm trong dấu ngoặc đơn được thực thi dưới dạng lệnh trong chuỗi ký tự.
    • Thay thế biến

      Công cụ sửa đổi thay thế cho tham chiếu đến các biến trong . Bảng bên dưới liệt kê các tùy chọn cú pháp (dùng ví dụ về biến TÔI).

      Biến với công cụ sửa đổi Sự miêu tả
      %~tôi Tiện ích mở rộng %I loại bỏ các dấu ngoặc kép xung quanh ("").
      %~fI Mở rộng %I thành tên đường dẫn đầy đủ.
      %~dI Thay thế %I bằng tên ổ đĩa.
      %~pI Thay thế %I bằng đường dẫn.
      %~nTôi Thay thế %I bằng một tên tệp duy nhất.
      %~xI Thay thế %I bằng phần mở rộng tên tệp.
      %~sI Thay thế bằng đường dẫn chỉ chứa tên ngắn.
      %~aI Thay thế %I bằng thuộc tính tệp.
      %~tI Thay thế %I bằng thời gian sửa đổi tập tin.
      %~zI Thay thế %I bằng kích thước tệp.
      %~$PATH:Tôi Tìm kiếm các thư mục được liệt kê trong biến môi trường PATH và thay thế %I bằng tên đầy đủ của tệp đầu tiên được tìm thấy. Nếu biến môi trường không được xác định hoặc tìm kiếm không tìm thấy bất kỳ tệp nào, công cụ sửa đổi sẽ trả về một chuỗi trống.

      Bảng dưới đây liệt kê các kết hợp của các công cụ sửa đổi có thể được sử dụng để tạo ra các kết quả phức tạp hơn.

      Trong các ví dụ trên %TÔI và PATH có thể được thay thế bằng các giá trị hợp lệ khác. Tên biến hợp lệ chấm dứt cú pháp %~.

      Sử dụng chữ in hoa trong tên biến, ví dụ: %TÔI, có thể cải thiện nhận thức về chương trình và tránh hiểu lầm với các sửa đổi trong đó chữ thường và chữ in hoa không khác nhau.

  • Phân tích một chuỗi

    Thiết kế cho /F có thể được sử dụng trực tiếp trên một chuỗi. Để làm điều này, đặt tham số Nhiều tên tệp giữa các dấu ngoặc đơn ( " Nhiều tên tệp" ). Tham số Nhiều tên tệp sẽ được lấy dưới dạng một dòng đầu vào từ tệp và sẽ được phân tích cú pháp.

  • Phân tích đầu ra

    Đội cho /F có thể được sử dụng để phân tích đầu ra lệnh. Để làm điều này, đặt tham số Nhiều tên tệp giữa các dấu ngoặc trong dấu ngoặc kép. Nó sẽ được coi như một dòng lệnh được chuyển tới trình thông dịch dòng lệnh con Cmd.exe và kết quả của lệnh được đặt trong bộ nhớ và được phân tích cú pháp như thể chúng là một tệp.

Ví dụ

Các tệp hàng loạt sử dụng cú pháp sau cho lệnh :

vì %%Biến đổi TRONG(một loạt) LÀM đội [Tùy chọn dòng lệnh]

Để hiển thị nội dung của tất cả các tệp có quyền .doc hoặc .txt trong thư mục hiện tại bằng một biến có thể thay thế %f, nhập lệnh sau:

đối với %f trong (*.doc *.txt) hãy gõ %f

Trong ví dụ trước, mọi tệp có phần mở rộng .doc hoặc .txt trong thư mục hiện tại sẽ được thay thế cho biến %f cho đến khi nội dung của tất cả các tập tin được hiển thị. Để sử dụng lệnh này trong một tệp bó, bạn phải thay thế tất cả các lần xuất hiện của %f TRÊN %%f. Nếu không, biến sẽ bị bỏ qua và thông báo lỗi sẽ hiển thị.

Để phân tích một tệp, bỏ qua các nhận xét, bạn có thể sử dụng lệnh sau:

for /F "eol=; token=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k

Lệnh này phân tích cú pháp từng dòng trong tệp Myfile.txt, bỏ qua các dòng bắt đầu bằng dấu chấm phẩy và chuyển phần tử thứ hai và thứ ba từ mỗi dòng vào phần nội dung của vòng lặp lệnh . Các phần tử được phân tách bằng dấu phẩy và/hoặc dấu cách. Nội dung hướng dẫn công dụng %Tôiđể có được phần tử thứ hai, %jđể có được phần tử thứ ba và %kđể lấy các phần tử còn lại trong chuỗi. Nếu tên tệp chứa khoảng trắng thì chúng phải được đặt trong dấu ngoặc kép (ví dụ: " Tên tập tin" ). Để sử dụng dấu ngoặc kép, bạn cần lệnh sử dụng lạiq. Mặt khác, dấu ngoặc kép được coi là xác định chuỗi ký tự cần phân tích cú pháp.

Biến đổi %Tôiđược khai báo rõ ràng trong hướng dẫn , MỘT %j%kđược tuyên bố ngầm với mã thông báo=. Bằng cách sử dụng mã thông báo= Bạn có thể chỉ định tối đa 26 phần tử miễn là điều này không gây ra nỗ lực khai báo một biến có tên lớn hơn "z" hoặc "Z".

Để phân tích đầu ra lệnh bằng cách truyền tham số Nhiều tên tệp trong ngoặc bạn có thể sử dụng lệnh sau:

for /F "usebackq delims==" %i IN (`set`) LÀM @echo %i

Ví dụ này liệt kê tên của các biến môi trường trong môi trường hiện tại.

Như kinh nghiệm đã chỉ ra, các tệp bó, tức là. tập tin hàng loạt rất phổ biến đối với các quản trị viên hệ thống, những người sử dụng chúng cho mục đích tự động hóa của họ. Và hôm nay chúng ta tiếp tục nghiên cứu những tập tin dơi tương tự này; chúng ta sẽ không xem xét những điều cơ bản mà sẽ chuyển sang những thứ nâng cao hơn.

Trong bài viết đầu tiên Viết tệp bat - ví dụ về tệp bó, chúng ta đã xem xét các ví dụ đơn giản về cách sử dụng tệp bó, nhưng hóa ra, việc viết tệp bó rất thú vị đối với hầu hết mọi người và mọi người đều muốn tìm hiểu thứ gì đó phức tạp hơn mà bạn có thể sử dụng. có thể đơn giản hóa hơn nữa việc tự động hóa một số quy trình.

Ví dụ 1 – xóa các kho lưu trữ cũ

Khi lưu trữ một nội dung nào đó, nhiều người quan tâm đến câu hỏi “ Làm cách nào để xóa các kho lưu trữ cũ không cần thiết bằng cách sử dụng tệp bó? " Ví dụ: tất cả chúng đều nằm trong một thư mục và bạn cần xóa tất cả các kho lưu trữ cũ hơn 14 ngày. Sau khi đọc hướng dẫn sử dụng và lướt Internet, tôi có thể đề xuất phương pháp sau.

Bạn có thể làm điều đó để chỉ một số lượng tài liệu lưu trữ nhất định sẽ được lưu trữ trong thư mục chứa các tài liệu lưu trữ, tương ứng là những tài liệu mới nhất ( những thứ kia. chỉ trong trường hợp của chúng tôi trong 2 tuần qua).

Điều này được thực hiện bằng cách sử dụng hai lệnh. Đầu tiên là DIR, tức là chúng tôi chỉ cần đọc tất cả các tệp trong một thư mục và viết tên của chúng vào một tệp văn bản.

thư mục D:\arhiv\*.rar /a:-D/b/o:-D > list_of_files.txt

  • thư mục D:\arhiv\*.rar– điều này có nghĩa là chúng tôi đọc tất cả các kho lưu trữ rar trong thư mục D:\arhiv\;
  • /a:-D– điều này có nghĩa là tất cả các tệp có thuộc tính được chỉ định sẽ được hiển thị, phím -D có nghĩa là chúng ta chỉ cần tệp chứ không phải thư mục, tiền tố “-” chỉ có nghĩa là phủ định, tức là. không phải thư mục, nếu chúng ta chỉ viết D thì nó cũng sẽ đọc thư mục;
  • /b– đây chỉ là đầu ra của tên tệp;
  • /o:-D– đây là sắp xếp, phím –D có nghĩa là việc sắp xếp sẽ được thực hiện theo ngày, nhưng trước tiên là những cái cũ hơn, để khắc phục điều này, chúng ta đã biết rằng tiền tố “-” sẽ giúp chúng ta;
  • > - nghĩa là đầu ra sẽ được redirect tới file list_of_files.txt, bạn có thể đặt tên khác.

Vì vậy, chúng tôi đã đếm tất cả các tài liệu lưu trữ của mình và ghi chúng vào một tệp, sau đó chúng tôi cần xem qua tất cả các tệp này và chỉ để lại 14 phần, tức là. trong 2 tuần qua. Chúng tôi thực hiện việc này bằng lệnh , nó là một loại vòng lặp thực hiện một hành động cụ thể cho từng tệp trong một thư mục hoặc từng dòng trong một tệp, như trong trường hợp của chúng tôi.

  • – đội tự làm vách ngăn;
  • /F "bỏ qua=13"– đây là khóa có tham số có nghĩa là 13 tệp đầu tiên không cần xử lý, tức là. chúng tôi bỏ qua chúng. Tại sao 13 mà không phải 14 có vì 14 lưu trữ ( những thứ kia. ngày hôm nay, sẽ được tạo khi thực thi tệp bó này) chưa được tạo nên 13;
  • %%Tôi– một biến lưu trữ tên của tập tin hiện tại;
  • Trong (list_of_files.txt)– có nghĩa là lặp lại tất cả các dòng trong tệp cụ thể này;
  • làm (del /Q "%%i")- cho biết những gì cần phải làm với mỗi tệp, trong trường hợp của chúng tôi, chúng tôi chỉ cần xóa các tệp này bằng phím del /Q /Q, để chúng tôi không bị yêu cầu xác nhận trước khi xóa. Đối với các thử nghiệm, tôi khuyên bạn nên thay thế del /Q bằng echo, tức là chỉ hiển thị những tập tin đó.

Tổng cộng, chúng tôi đã nhận được tệp bó này:

thư mục D:\arhiv\*.rar /a:-D/b/o:-D > list_of_files.txt

for /F "skip=13" %%i in (list_of_files.txt) do (del /Q "%%i")

Theo đó, sau những dòng này, bạn có thể tự viết mã lưu trữ và cuối cùng chúng ta sẽ nhận được rằng chỉ có 14 kho lưu trữ sẽ được lưu trữ trong thư mục của chúng ta, tất nhiên là những kho gần đây nhất.

Ví dụ 2 - Sử dụng biến

Bạn thậm chí có thể sử dụng các biến trong các tệp bó, giống như trong ngôn ngữ lập trình thực. Hãy xem xét ví dụ đơn giản nhất về việc sử dụng biến, ví dụ: chúng tôi muốn nhân với 2 số mà chúng tôi nhập vào trường khi chạy tệp bó.

@echo tắt

BỘ /a c=%a%*%b%

tiếng vang %c%

Như bạn đã hiểu, các biến được đặt bằng lệnh SET. Để sử dụng biến sau này, chúng ta chèn dấu phần trăm (%) vào cả hai bên của biến để dòng lệnh hiểu rằng đây là một biến.

  • @echo tắt– để các lệnh của chúng tôi không hiển thị trên màn hình;
  • ĐẶT a=2– chúng ta chỉ cần đặt biến “a” thành một giá trị;
  • SET /p b=[nhập số thứ hai để nhân]– chúng ta đặt biến “b” thành giá trị mà chúng ta nhập vào trường, để nhân viên xử lý lô hiểu rằng chúng ta muốn tự nhập giá trị của biến, phím /p được sử dụng;
  • BỘ /a c=%a%*%b%- đặt biến “c” thành kết quả của biểu thức của chúng tôi ( trong ví dụ của chúng tôi đây là phép nhân);
  • tiếng vang %c%- hiển thị giá trị của biến “c”;
  • tạm ngừng- chúng tôi chỉ cần tạm dừng việc thực thi tệp bat của mình để xem tất cả kết quả.

Nhân tiện, để các chữ cái tiếng Nga hiển thị bình thường trên dòng lệnh, hãy lưu tệp bat ở dạng mã hóa DOS-866.

Chúng tôi đã sắp xếp các biến, bây giờ hãy áp dụng điều này cho ví dụ đầu tiên của chúng tôi, giả sử chúng tôi muốn để lại không phải 14 kho lưu trữ mà là con số mà chúng tôi muốn, đối với điều này, khi bạn khởi chạy tệp bó, chúng tôi sẽ nhập số lượng tài liệu lưu trữ cần được lưu. Nó sẽ trông giống như thế này:

@echo tắt

thư mục D:\test\*.rar /a:-D/b/o:-D > list_of_files.txt

for /F "skip=%chislo%" %%i in (list_of_files.txt) do (del /Q "%%i")

Chà, tất nhiên, những thứ như thế này, trong thực tế, điều này có thể không cần thiết, nhưng ít nhất chúng ta đã học được cách sử dụng các biến.

Về các biến, tôi cũng muốn nói rằng có những biến hệ thống như:

%NGÀY%- hiển thị ngày hiện tại.

%THỜI GIAN%- hiển thị thời gian hiện tại.

Ví dụ: chạy đoạn mã sau:

tiếng vang %DATE%

echo %time:~0,-3%

Tôi đã viết biến %TIME% chính xác theo cách này, để kết quả được hiển thị ở dạng dễ đọc hơn, hãy thử viết %TIME% và % TIME:~0.-3% cho bạn, trong trường hợp thứ hai là cuối cùng 3 ký tự sẽ bị xóa.

Trên thực tế, có nhiều biến hệ thống hơn; những biến này có thể được yêu cầu thường xuyên hơn những biến khác.

Ví dụ 3 – Câu lệnh thực thi có điều kiện IF

Giống như các ngôn ngữ chính thức khác, bạn có thể sử dụng toán tử thực thi có điều kiện IF trong các tệp bó. Hãy đưa ra một ví dụ nhỏ, tệp bó chỉ kiểm tra xem tệp có tồn tại hay không:

@echo tắt

NẾU Tồn tại test.txt (

echo Tập tin tồn tại

echo Không có tập tin nào như vậy

NẾU Tồn tại test.txt- đây chính xác là những gì đang được kiểm tra sự hiện diện của tập tin.

Sau, trong ngoặc đơn, là những gì chúng ta muốn làm nếu tệp tồn tại và nếu tệp không tồn tại, thì sau ELSE, sẽ đến những gì cần phải làm nếu tệp không tồn tại.

Bây giờ hãy sửa đổi một chút ví dụ của chúng tôi bằng cách nhân số chúng tôi đã nhập với 2, đơn giản, nếu đột nhiên nhập số 0, chúng tôi sẽ hiển thị thông báo tương ứng và yêu cầu bạn nhập lại số.

@echo tắt

SET /p b=[nhập số thứ hai để nhân]

BỘ /a c=%a%*%b%

nếu %c%==0 (echo bạn đã nhập số 0, hãy nhập số khác) nếu không thì echo %c%

if %c%==0 (goto:metka)

Mọi thứ ở đây đều quen thuộc rồi, duy nhất điều duy nhất là khi so sánh biến “c” thì toán tử so sánh == ( hai bằng), vì đơn giản bằng (=) là toán tử gán. Nếu bạn để ý, tôi đã sử dụng toán tử goto ở đây, tức là di chuyển đến nhãn mong muốn. Nói cách khác, chúng tôi đặt một nhãn và tùy thuộc vào kết quả kiểm tra điều kiện, việc chuyển đổi sang nhãn mong muốn sẽ được thực hiện.

Bây giờ tôi muốn lưu ý rằng nhiều người sử dụng chương trình winrar trong công việc của họ, chẳng hạn như để tạo một kho lưu trữ và tất nhiên, sử dụng nó trong các tệp bó của họ, nhưng nhiều người đặt câu hỏi về các khóa liên quan đến winrar. Đừng nhầm lẫn các khóa winrar, chúng chỉ được sử dụng cho chương trình này chứ không phải cho mọi thứ có trong tệp bó, tức là. dòng lệnh, ví dụ: nếu bạn sử dụng 7zip, thì các phím sẽ khác. Đối với key winrar, theo tôi, cuốn sách tham khảo đầy đủ và tốt nhất tất nhiên nằm trong chính winrare. Để xem mô tả về các khóa winrar, hãy mở chương trình winrar, đi tới menu Trợ giúp, sau đó nhấp vào " Nội dung", sau đó chọn dòng" Chế độ dòng lệnh", trong đó sẽ có mô tả về tất cả các khóa, thậm chí cả các ví dụ đơn giản cũng được đưa ra. Theo đó, nếu bạn có winrar phiên bản tiếng Anh thì ý nghĩa cũng tương tự, chỉ có điều mọi thứ sẽ bằng tiếng Anh.

Điều này kết thúc phần thứ hai của chúng ta trong việc nghiên cứu các tập tin batch. Chúc may mắn!