Tôi có thể tuyên bố một danh sách hoặc mảng trong một tập tin thực thi như thế này:Tạo danh sách hoặc mảng trong Windows hàng loạt
set list = "A B C D"
Và sau đó tôi cần phải viết những vào một tập tin, với khoảng trống giữa:
A
B
C
D
Tôi có thể tuyên bố một danh sách hoặc mảng trong một tập tin thực thi như thế này:Tạo danh sách hoặc mảng trong Windows hàng loạt
set list = "A B C D"
Và sau đó tôi cần phải viết những vào một tập tin, với khoảng trống giữa:
A
B
C
D
Không có loại 'mảng' trong các tệp hàng loạt, cả hai đều lộn ngược và ngược lại, nhưng có cách giải quyết khác. Đây là một liên kết cung cấp một vài gợi ý để tạo một hệ thống cho chính bạn tương tự như một mảng trong một lô: http://hypftier.de/en/batch-tricks-arrays. Đối với việc lặp lại một tập tin "echo biến >> filepath" hoạt động cho echoing nội dung của một biến vào một tập tin, và "echo". (khoảng thời gian không phải là lỗi đánh máy) hoạt động hoặc lặp lại một ký tự dòng mới. Tôi nghĩ rằng cả hai cùng nhau nên làm việc để hoàn thành những gì bạn cần.
@echo off
setlocal
set "list=a b c d"
(
for %%i in (%list%) do (
echo(%%i
echo(
)
)>file.txt
Bạn không cần - thực sự, không thể "khai báo" biến theo lô. Gán một giá trị cho một biến tạo ra nó và gán một chuỗi rỗng sẽ xóa nó. Bất kỳ tên biến nào không có giá trị được gán HAS đều có giá trị của một chuỗi rỗng. TẤT CẢ các biến là chuỗi - KHÔNG CÓ ngoại lệ. Có các hoạt động xuất hiện để thực hiện các hàm toán học (số nguyên), nhưng chúng hoạt động bằng cách chuyển đổi qua lại từ các chuỗi.
Hàng loạt nhạy cảm với khoảng trống trong tên biến, do đó, nhiệm vụ của bạn như được đăng sẽ gán chuỗi "A B C D"
- bao gồm dấu ngoặc kép, cho biến "list "
- KHÔNG bao gồm dấu ngoặc kép, nhưng bao gồm cả dấu cách. Cú pháp set "var=string"
được sử dụng để gán giá trị string
đến var
trong khi set var=string
sẽ thực hiện tương tự. Hầu hết. Trong trường hợp đầu tiên, bất kỳ dấu cách đi lạc nào sau dấu ngoặc kép được LOẠI TRỪ từ giá trị được chỉ định, trong phần thứ hai, chúng được BAO GỒM. Không gian khó có thể nhìn thấy khi in.
ECHO
lặp lại chuỗi. Về cơ bản, nó được theo sau bởi một khoảng trống - một trong các dấu phân cách mặc định được sử dụng theo lô (các dấu khác là TAB, COMMA, SEMICOLON - bất kỳ thứ gì trong số này cũng như NHƯNG TABS thường được chuyển đổi thành không gian-squence bởi các trình soạn thảo văn bản và những người khác đã phát triển các quirks của riêng mình trong những năm qua.) Các ký tự khác theo sau O
trong ECHO
đã được tìm thấy để làm chính xác những gì SPACE tài liệu nên làm. DOT là phổ biến. Mở ngoặc (
có lẽ là hữu ích nhất kể từ khi lệnh
ECHO.%emptyvalue%
sẽ tạo ra một báo cáo của ECHO
nhà nước (ECHO is on/off
) trong khi
ECHO(%emptyvalue%
sẽ sản xuất một dòng trống.
Sự cố với ECHO(
là kết quả "trông" không cân bằng.
Có, bạn có thể sử dụng cả hai cách.Nếu bạn chỉ muốn tách riêng các yếu tố và hiển thị chúng trong dòng riêng biệt, một danh sách đơn giản:
set list=A B C D
Một danh sách các giá trị cách nhau bởi không gian có thể dễ dàng xử lý bởi for
lệnh:
(for %%a in (%list%) do (
echo %%a
echo/
)) > theFile.txt
Bạn cũng có thể tạo một mảng theo cách này:
setlocal EnableDelayedExpansion
set n=0
for %%a in (A B C D) do (
set vector[!n!]=%%a
set /A n+=1
)
và hiển thị các phần tử mảng theo cách này:
(for /L %%i in (0,1,3) do (
echo !vector[%%i]!
echo/
)) > theFile.txt
Để biết thêm chi tiết về quản lý mảng trong file hàng loạt, xem: Arrays, linked lists and other data structures in cmd.exe (batch) script
CHÚ Ý! Bạn phải biết rằng tất cả các ký tự được bao gồm trong lệnh set
được chèn vào tên biến (ở bên trái dấu bằng) hoặc trong giá trị biến. Ví dụ, lệnh này:
set list = "A B C D"
tạo ra một biến gọi là list
(list-không gian) với giá trị "A B C D"
(không gian, báo giá, A, vv). Vì lý do này, bạn nên không bao giờ chèn dấu cách vào các lệnh set
. Nếu bạn cần phải kèm theo giá trị trong dấu ngoặc kép, bạn phải kèm theo cả tên biến và giá trị của nó:
set "list=A B C D"
PS - Bạn không nên sử dụng ECHO.
để lại dòng trống! Giải pháp thay thế là ECHO/
. Để biết thêm chi tiết về thời điểm này, xem: http://www.dostips.com/forum/viewtopic.php?f=3&t=774
@echo off
set array=
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set nl=^&echo(
set array=auto blue ^!nl!^
bycicle green ^!nl!^
buggy red
echo convert the String in indexed arrays
set /a index=0
for /F "tokens=1,2,3*" %%a in ('echo(!array!') do (
echo(vehicle[!index!]=%%a color[!index!]=%%b
set vehicle[!index!]=%%a
set color[!index!]=%%b
set /a index=!index!+1
)
echo use the arrays
echo(%vehicle[1]% %color[1]%
echo oder
set index=1
echo(!vehicle[%index%]! !color[%index%]!
Đôi khi các phần tử mảng có thể rất dài, tại thời điểm đó bạn có thể tạo một mảng theo cách này:
set list=a
set list=%list%;b
set list=%list%;c
set list=%list%;d
Sau đó hiển thị nó:
@echo off
for %%a in (%list%) do (
echo %%a
echo/
)
Vâng ... rằng véc tơ [i] là thứ tôi đang tìm kiếm! Cảm ơn! – JasonXA
Và nếu bạn sử dụng 'for/L %% i in (0,1,% n%)' bạn sẽ nhận được tất cả, thay vì chỉ là lần đầu tiên 3. :) –