2010-05-05 18 views
5

Kafamın altını çizeceğim bir Windows toplu iş komut dosyası sorunum var (hayır amaçlıdır). Ben -Windows toplu iş dosyasında PATH ile başka bir değişken değerine nasıl PATH ayarlanacağı

\Microsoft was unexpected at this time. 

_OLD_VIRTUAL_PATH aslen PATH gelen kuruldu değişken olduğunu ve boşluklar içeriyor:

if defined _OLD_VIRTUAL_PATH (
    set PATH=%_OLD_VIRTUAL_PATH% 
) 

bunu çalıştırmak ve _OLD_VIRTUAL_PATH alıyorum ayarlanır: sorunlu script şöyle eminim sorun bu. Ama çözüm nedir? Ben tırnak içine alırsanız başarılı bir şekilde çalışır, ancak PATH değişkeninin tüm değerinin tırnak içinde olması gerektiğini düşünmüyorum.

cevap

7

Sorununuz burada boşluk değil, kapanış parantezi. Muhtemelen 32 bit uygulamalar için Program Files dizininin Program Files (x86) olduğu bir 64 bit sistem çalıştırıyorsunuz. Bir toplu iş dosyasında parantez içine alınmış bir blokta, kapanış parantezi bloğu sonlandırır, böylece satırın geri kalanı bir yazım hatası verir.

1) tırnak içinde tam set argüman koyun:

Bunu düzeltmek için iki yol vardır. - bu satır çalışmaları

if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH% 
+0

Vay - Bugün 2 şey öğrendim ... Bu sözdiziminin patlayacağından emindim, ama eminim, işe yarıyor. Ancak, neden Evgeny için gerekli olabileceğinden emin değilim - boşlukları olan bir PATH ayarlamak hiç bir zaman benim için hiç sorun çıkarmadan bir sorun olmamıştır. Belki de Evgeny'nin _OLD_VIRTUAL_PATH'ında alıntı gerektiren başka bir özel karakter (boşluk dışında) var mı? –

+2

@Michael: Sorun olan alanlar değil. Gönderiyi yeniden yazdım (umarım Chris umursamaz, gerekirse geri dönebilir) ve neyin yanlış olduğunu ve nedenini açıkladı. – Joey

+0

Teşekkürler Johannes, nedeni unuttum, ama bu kesinlikle mantıklı. –

0

Eh - hangi hat tam olarak hata üretiyor - Ben

Senaryonuz benim için iyi iş gibi görünüyor ... Şu ana kadar cmd komut defined operasyon hakkında hiç tanımadın mı?

Ayrıca deneyebilirsiniz: Eğer sen bash ne var gibi bir şey olmasını bekliyor, Windows cmd komut dosyası içine geliyorlar bana, eğer

if not "%_OLD_VIRTUAL_PATH%" == "" (
    set PATH=%_OLD_VIRTUAL_PATH% 
) 

Ve inan senin kafa, acı içinde çok fazla olur çok yakında. Eğer cmd komut dosyası mutlak bir gereklilik değilse, başka bir betik dili (PowerShell, Python, PERL - herhangi bir şey) kullanmayı düşünebilirsiniz. En büyük şey (belki de tek şey) ki bu cmd komut dosyası için gidiyor her Windows kutusunda zaten yüklü olmasıdır.

+0

Komut Extensions için bir "tanımlanan" operatörü yok:

if defined _OLD_VIRTUAL_PATH ( set "PATH=%_OLD_VIRTUAL_PATH%" ) 

2) bir blok kullanmayın: Bu kapanış parantez blok sonunda olarak kabul edilmeyecektir neden olur TAMAM. Başarısız olan 'set' hattı. – EMP

+0

set komutu, _OLD_VIRTUAL_PATH'deki boşluklarda bile benim için iyi çalışıyor. '_OLD_VIRTUAL_PATH' tam olarak nedir? Komut dosyanızın tam olarak sizin sorduğunuz gibi biçimlendirilmiş mi (cmd.exe, sözdizimi hakkında çok seçici olabilir ve her zaman sezgisel bir şekilde değil). –

İlgili konular