Bir Windows .cmd dosyasında veya toplu iş dosyasında yolda boşluklar içeren bir yol değişkeni ayarlayın


112

Senaryo yazmada yeniyim ve bunu çalıştıramıyorum. Dosyaları içinde boşluk olmayan bir yola taşımış olsaydım yapabilirdim, ancak mümkünse alanla çalışmasını isterim.

Bir grup Office güncellemesini .cmd dosyası içeren bir klasöre çıkarmak istiyorum. Toplu iş dosyasını herhangi bir bilgisayarda kullanılabilir hale getirmek için, başka bir makinede çalıştırmak için yalnızca bir yerde değiştirmem gereken bir yol değişkeni ayarlıyorum. Sorun, yolun içinde bir boşluk olmasıdır. Tanımdaki yola tırnak işaretleri koyarsam, cmd.exe dosya adını ve anahtarları eklemeden önce bunları yolun çevresine koyar ve toplu iş "Komut satırı sözdizimi hatası" ile başarısız olur. Tırnak işaretleri olmadan, "dahili veya harici bir komut, çalıştırılabilir program veya toplu iş dosyası olarak tanınmaz" ile başarısız olur.

Test için, yardım anahtarını çalıştırana kadar kullanıyorum. Bunu bir 8.3 dosya / klasör adı kullanarak yapabilirim (örn. MyDocu olarak Belgelerim ~ 1), ama bu farklı bir yolla yapılabilir mi?


Tırnaklar, dosya adıyla birlikte yolu içermelidir ve komut satırı parametreleri izlemelidir. Komut satırının nasıl oluşturulduğu hakkında biraz daha ayrıntı verebilir misiniz? Tam olarak ne demek istiyorsun>
Tanımdaki

Yanıtlar:


104

Bunun gibi bir şey dene:

SET MY_PATH=C:\Folder with a space

"%MY_PATH%\MyProgram.exe" /switch1 /switch2

Not Defteri'nde Değiştir'i kullanarak bunu yaptım. Teşekkür ederim.
marcerickson

5
Yardımcı olmasına sevindim. Size yardımcı olduğunu düşündüğünüz cevabı oylarsanız ve kabul ederseniz çok iyi olur.
aphoria

75

kullanırım

set "VAR_NAME=<String With Spaces>"

yol güncellenirken:

set "PATH=%UTIL_DIR%;%PATH%"

3
bu kabul edilen cevap olmalıdır. Bazı nedenlerden dolayı, değerin bir boşluk varsa ve tırnaksız ise if bloğundan set çağrısı çalışmaz.
Kevin

33

Burada iki seçenek var. İlk olarak, yolu tırnaksız olarak saklayabilir ve daha sonra alıntı yapabilirsiniz:

set MyPath=C:\Program Files\Foo
"%MyPath%\foo with spaces.exe" something

Kullanabileceğiniz başka bir seçenek, dizeleri alıntı yapmak için her şeyi içeren bir alt yordamdır (ancak bu durumda, tırnak eklediğiniz, onları çıkardığınız ve fayda sağlamadan yeniden eklediğiniz için bu aslında pek iyi bir fikir değildir):

set MyPath="C:\Program Files\Foo"
call :foo %MyPath%
goto :eof

:foo
"%~1\foo.exe"
goto :eof

%~1Argüman tırnak işareti kaldırır. Bu, alıntılanan klasör adlarını iletirken kullanışlıdır, ancak daha önce de belirtildiği gibi, bu özel durumda bu en iyi fikir değildir :-)


İlk yöntemi, Not Defteri'nde Değiştir'i kullanarak kullandım. İkincisi gereksiz yere karmaşık görünüyordu. Teşekkür ederim.
marcerickson

2
Parametreleri alan bir Toplu iş dosyam var. set LALA=%~1Benim için işe yarayan şey kullanmaktı .
JCH2k

İkinci yöntem, alt programlar kullandığınızda mükemmel çalışıyor
robe007

16

Bunu dene;

  1. aşağıdaki gibi bir değişken oluşturun

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. Ardından yolu değişken ile değiştirin. Başlangıç ​​ve bitiş için teklifler eklediğinizden emin olun

    vstest.console.exe "%SolutionDir%\Automation.Specs.dll"
    

8

Bir .bat dosyası oluştururken yolu her zaman çift tırnak içine alırım. (DURAKLAT'ı ekledim, böylece ekran kapanmayacak.)

Örneğin:

"C:\Program Files\PageTech\PCLReader64_131\PCLReader64.exe"
PAUSE

7

Bunu yapmanın doğru yolu şudur:

@ECHO off
SET MY_PATH=M:\Dir\^
With Spaces\Sub Folder^
\Dir\Folder
:: calls M:\Dir\With Spaces\Sub Folder\Dir\Folder\hello.bat
CALL "%MY_PATH%\hello.bat"
pause

5

Bu sorunu çözmenin en kolay yolu, klasör adını tırnak içine almaktır:

(cd\New Folder\...) --> (cd\"New Folder"\...)

Bunun yardımcı olacağını umuyor.


2

Kalıcı yolu kaydetmeniz gerekiyorsa (cmd yeniden başlatıldığında yol değişmez)

  1. Komut İstemi'ni yönetici olarak çalıştırın (cmd.exe'ye sağ tıklayın ve yönetici olarak çalıştır'ı seçin)

  2. Cmd olarak setx path "%path%;your new path" girin

  3. Yol yazarak ve enter tuşuna basarak yolun doğru şekilde gidilip girilmediğini kontrol edin


1
Sanırım soru PATH değişkeni ile ilgili değil , daha çok bir yol değişkeni ile ilgili. OP belli bir yolu bir değişkene depolamak ve değeri toplu komut dosyasında kullanmak istiyor.
Andriy M

1

ayrıca bunun yalnızca benim için çalıştığı gibi çift eğik çizgi eklemeyi deneyin

set dir = "C: \\ 1. Bazı Klasörler \\ Diğer Bazı Klasörler \\ Sadece Çünkü"

MKDIR'de @echo% dir%

OMG, gönderdikten sonra gönderimdeki ikinci \ \ 'yi kaldırdılar, bu yüzden yorumumu açarsanız ve üç gösterirse, onları iki olarak okumalısınız ......

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.