Tetapkan variabel jalur dengan spasi di jalur dalam file .cmd Windows atau file batch


112

Saya baru dalam penulisan skrip dan tidak bisa mendapatkan yang ini untuk bekerja. Saya bisa jika saya memindahkan file ke jalur tanpa spasi di dalamnya, tapi saya ingin bekerja dengan ruang itu jika bisa.

Saya ingin mengekstrak banyak pembaruan Office ke folder dengan file .cmd. Untuk membuat file batch dapat digunakan di komputer mana pun, saya menetapkan variabel jalur yang hanya perlu saya ubah di satu tempat untuk menjalankannya di komputer lain. Masalahnya adalah bahwa jalan memiliki spasi di dalamnya. Jika saya menempatkan tanda kutip di sekitar jalur dalam definisi, cmd.exe menempatkannya di sekitar jalur sebelum menambahkan nama file dan sakelar dan batch gagal dengan "Kesalahan sintaks baris perintah." Tanpa tanda kutip, gagal dengan, "tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dioperasikan, atau file batch."

Untuk pengujian, saya menggunakan sakelar bantuan hingga atau jika saya bisa membuatnya berfungsi. Saya dapat melakukannya dengan menggunakan nama file / folder 8,3 (mis. Dokumen Saya sebagai MyDocu ~ 1), tetapi dapatkah itu dilakukan dengan cara yang berbeda?


Tanda kutip harus berisi jalur dengan nama file dan parameter baris perintah harus mengikuti. Dapatkah Anda memberikan detail lebih lanjut tentang bagaimana baris perintah dibuat? Persis apa yang Anda maksud dengan> Jika saya meletakkan tanda kutip di sekitar jalur dalam definisi, cmd.exe menempatkannya di sekitar jalur sebelum menambahkan nama file dan sakelar
vladhorby

Jawaban:


104

Coba sesuatu seperti ini:

SET MY_PATH=C:\Folder with a space

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

Itulah yang saya lakukan menggunakan Ganti di Notepad. Terima kasih.
marcerickson

5
Senang bisa membantu. Alangkah baiknya jika Anda memberi suara positif dan menerima jawaban apa pun yang menurut Anda membantu.
aphoria

75

saya menggunakan

set "VAR_NAME=<String With Spaces>"

saat memperbarui jalur:

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

3
ini harus menjadi jawaban yang diterima. untuk beberapa alasan, memanggil set dari blok if tidak berfungsi jika nilainya memiliki spasi dan tidak dikutip.
Kevin

33

Ada dua opsi di sini. Pertama, Anda dapat menyimpan jalur tanpa tanda kutip dan mengutipnya nanti:

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

Opsi lain yang dapat Anda gunakan adalah subrutin yang mendukung string yang tidak dikutip (tetapi dalam kasus ini sebenarnya bukan ide yang bagus karena Anda menambahkan tanda kutip, menghapusnya, dan menambahkannya kembali tanpa manfaat):

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

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

The %~1menghilangkan tanda kutip argumen. Ini berguna ketika memberikan nama folder di sekitar kutipan tetapi, seperti yang dikatakan sebelumnya, dalam kasus khusus ini itu bukan ide terbaik :-)


Saya menggunakan metode pertama, menggunakan Ganti di Notepad. Yang kedua sepertinya terlalu rumit. Terima kasih.
marcerickson

2
Saya memiliki file Batch yang mendapat parameter. Menggunakan set LALA=%~1itulah yang berhasil bagi saya.
JCH2k

Metode kedua bekerja dengan sempurna saat Anda menggunakan subrutines
robe007

16

Coba ini;

  1. buat variabel seperti di bawah ini

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. Kemudian ganti jalur dengan variabel. Pastikan untuk menambahkan kutipan untuk awal dan akhir

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

8

Saya selalu menempatkan jalur dalam tanda kutip ganda saat saya membuat file .bat. (Saya baru saja menambahkan JEDA sehingga tidak akan menutup layar.)

Sebagai contoh:

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

7

Cara yang tepat untuk melakukannya adalah seperti ini:

@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

Cara termudah untuk memperbaiki masalah ini adalah dengan memasukkan nama folder dalam tanda kutip:

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

Semoga ini bisa membantu.


2

Jika Anda perlu menyimpan jalur permanen (jalur tidak berubah saat cmd dimulai ulang)

  1. Jalankan Command Prompt as administrator (Klik kanan pada cmd.exe dan pilih run as administrator)

  2. Di cmd setx path "%path%;your new path" lalu masukkan

  3. Periksa apakah jalur diambil dengan benar dengan mengetik jalur dan menekan enter


1
Menurut saya, pertanyaannya bukan tentang variabel PATH , melainkan tentang variabel jalur . OP tampaknya ingin menyimpan jalur tertentu ke dalam variabel dan menggunakan nilai di seluruh skrip batch.
Andriy M

1

juga coba tambahkan garis miring ganda seperti ini hanya berfungsi untuk saya

set dir = "C: \\ 1. Beberapa Map \\ Beberapa Map Lain \\ Hanya Karena"

@echo di MKDIR% dir%

OMG setelah posting mereka menghapus yang kedua \ di posting saya jadi jika Anda membuka komentar saya dan itu menunjukkan tiga Anda harus membacanya sebagai dua ......

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.