2013-07-12 23 views

Trả lời

0

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.

10
@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.

75

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

+0

Vâng ... rằng véc tơ [i] là thứ tôi đang tìm kiếm! Cảm ơn! – JasonXA

+1

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. :) –

-1
@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%]! 
4

Đô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/ 
) 
Các vấn đề liên quan