2010-01-08 10 views
67

Tôi có một thư mục mà tôi muốn liệt kê tất cả các tệp .doc có số ;.Làm thế nào để nối chuỗi trong một tập tin thực thi Windows?

Tôi biết lệnh batch echos sau tất cả các file:

for /r %%i In (*.doc) DO echo %%i 

Nhưng bây giờ tôi muốn đặt chúng tất cả trong một biến, thêm một ; ở giữa và echo chúng cùng một lúc.
Tôi có thể làm như thế nào?

set myvar="the list: " 
for /r %%i In (*.doc) DO <what?> 
echo %myvar% 

Trả lời

58

gì về:

@echo off 
set myvar="the list: " 
for /r %%i in (*.doc) DO call :concat %%i 
echo %myvar% 
goto :eof 

:concat 
set myvar=%myvar% %1; 
goto :eof 
+2

Cảm ơn rất nhiều cho câu trả lời này! Nó chỉ giải quyết cho tôi một vấn đề tạo động một classpath thành một tập tin batch :) Thêm các sửa đổi cần thiết, nhưng vấn đề của tôi đã làm concat và điều này đã cố định nó! – Charliemops

43

Dựa trên giải pháp Rubens', bạn cần phải kích hoạt mở rộng chậm trễ của các biến env (gõ "giúp đỡ setlocal" hoặc "giúp đỡ cmd") để các var là một cách chính xác đánh giá trong vòng lặp:

@echo off 
setlocal enabledelayedexpansion 
set myvar=the list: 
for /r %%i In (*.sql) DO set myvar=!myvar! %%i, 
echo %myvar% 

Cũng nên hạn chế sau (MSDN):

Môi trường cá nhân tối đa kích thước biến là 8192byte.

+1

Hạn chế là sai. Kích thước biến môi trường tối đa trong Windows là khoảng 64 KiB, do đó, khoảng 32k ký tự. Tuy nhiên, trong các tập tin batch, bạn có vấn đề là độ dài dòng lệnh tối đa là 8190 ký tự, vì vậy mọi biến môi trường bạn đặt ở đó phải ngắn hơn. Ngoài ra, giới hạn toàn bộ môi trường 65 KiB là không có thật. Tôi chỉ tạo ra các biến môi trường tổng cộng tại một vài MiB mà không có vấn đề gì. – Joey

+2

Liên kết cho biết 65 THOUSAND KB, tương đương 64MB. Tôi sẽ không tranh luận, vì tôi chưa bao giờ giải quyết nó. – devio

+1

Wow cảm ơn bạn rất nhiều người đàn ông! Bạn đã làm cho ngày của tôi :-) – Julien

0

Lưu ý rằng các biến @fname hoặc @ext có thể được ghép nối đơn giản. Đây:

forfiles /S /M *.pdf /C "CMD /C REN @path @[email protected]" 

đổi tên tất cả các file PDF sang "filename_old.pdf"