2012-09-20 23 views
5

Tôi mới làm quen với tập tin theo lô và tôi đang cố gắng viết một phần để làm một phần công việc của mình (Tôi biết lười biếng phải)CMD lấy chuỗi từ tập tin và THIẾT LẬP nó như một biến để sử dụng trong cd

Vì vậy đến nay tôi đã sau ...

SET skip=1 

REM for all the directories indicated to contain core repositories 
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO ( 
SET TgtDir =%%i 
echo %TgtDir% >> C:\result.txt 
) 

Nội dung Repos.txt là:

60000 
C:\somedir\someotherdir\ 
C:\a\b\c\ 

về cơ bản tôi muốn tập lệnh này phải đi qua một tập tin, bỏ qua những dòng đầu tiên sẽ được sử dụng cho cài đặt trễ sau và trích xuất từng dòng n (lý tưởng) chuyển nó vào lệnh cd nhưng bây giờ tôi chỉ cố gắng đưa nó vào biến TgtDir.

Khi tôi chạy kịch bản này đầu ra trong C: \ result.txt là:

ECHO is on. 
ECHO is on. 

Bất kỳ sự giúp đỡ?

+1

'SET TgtDir = %% i' đặt một biến gọi là' TgtDir '- lưu ý thêm không gian, vì vậy'% TgtDir% 'trả về không có gì là không có gì gọi là – SeanC

Trả lời

10

Bạn sẽ muốn xem tùy chọn EnableDelayedExpansion cho tệp hàng loạt. Từ liên kết được đề cập ở trên:

Mở rộng biến trễ thường hữu ích khi làm việc với FOR Loops. Thông thường, toàn bộ vòng lặp FOR được đánh giá là một lệnh duy nhất ngay cả khi nó mở rộng nhiều dòng của một tập lệnh batch.

Vì vậy, kịch bản của bạn sẽ kết thúc lên trông như thế này:

@echo off 
setlocal enabledelayedexpansion 
SET skip=1 

REM for all the directories indicated to contain core repositories 
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO (
    SET TgtDir=%%i 
    echo !TgtDir! >> C:\result.txt 
) 

Là một thay thế, chỉ cần sử dụng biến %%i trong vòng lặp bên trong của bạn, chứ không phải là tạo ra một biến mới.

+0

Fantastic, giải pháp hoàn hảo. thanks :) –

+0

Điều này cũng giải quyết được vấn đề của tôi. Trong trường hợp của tôi, kịch bản luôn thất bại trong lần đầu tiên nó được thực hiện trong một cmd.exe mới. Chạy nó hai lần trong cùng một cmd.exe tuy nhiên sẽ làm việc. Cảm ơn gợi ý này. :) – Qben

0
@echo off 
setlocal enabledelayedexpansion 
SET skip=1 
REM for all the directories indicated to contain core repositories 
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO echo %%n>>c:result.txt 
+0

Nếu không có định dạng, điều này rất khó hiểu. – Andrew

Các vấn đề liên quan