CMD mendapatkan string dari file dan SET sebagai variabel untuk digunakan dalam cd

Saya baru mengenal file batch dan saya mencoba menulis satu untuk melakukan sebagian pekerjaan saya (saya tahu malas kan)

Sejauh ini saya memiliki yang berikut...

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
)

Isi Repos.txt adalah:

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

Pada dasarnya saya ingin skrip ini melewati sebuah file, mengabaikan baris pertama yang akan digunakan untuk pengaturan penundaan nanti, dan mengekstrak setiap baris kemudian (idealnya) meneruskannya ke perintah cd tetapi untuk saat ini saya hanya mencoba mendapatkannya ke dalam variabel TgtDir.

Ketika saya menjalankan skrip ini, output di C:\result.txt adalah:

ECHO is on.
ECHO is on.

Ada bantuan?


person Richard Newman    schedule 20.09.2012    source sumber
comment
SET TgtDir =%%i menyetel variabel bernama TgtDir - perhatikan spasi ekstra, jadi %TgtDir% tidak mengembalikan apa pun karena tidak ada yang disebut demikian   -  person SeanC    schedule 20.09.2012


Jawaban (2)


Anda sebaiknya melihat opsi EnableDelayedExpansion untuk file batch. Dari tautan di atas:

Ekspansi variabel tertunda sering kali berguna saat bekerja dengan FOR Loops. Biasanya, keseluruhan perulangan FOR dievaluasi sebagai satu perintah meskipun mencakup beberapa baris skrip batch.

Jadi skrip Anda akan terlihat seperti ini:

@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
)

Sebagai alternatif, cukup gunakan variabel %%i di loop dalam Anda, daripada membuat variabel baru.

person Jonah Bishop    schedule 20.09.2012
comment
Ini memecahkan masalah saya juga. Dalam kasus saya skrip selalu gagal saat pertama kali dijalankan di cmd.exe baru. Menjalankannya dua kali dalam cmd.exe yang sama akan berhasil. Terima kasih atas petunjuk ini. :) - person Qben; 05.10.2012

person    schedule
comment
Tanpa pemformatan, hal ini sangat sulit untuk dipahami. - person Andrew; 01.05.2014