Đặt biến đường dẫn có khoảng trắng trong đường dẫn trong tệp .cmd Windows hoặc tệp hàng loạt


112

Tôi là người mới viết kịch bản và không thể làm cho cái này hoạt động. Tôi có thể nếu tôi di chuyển các tệp đến một đường dẫn không có khoảng trắng trong đó, nhưng tôi muốn nó hoạt động với khoảng trắng nếu có thể.

Tôi muốn trích xuất một loạt các bản cập nhật Office vào một thư mục có tệp .cmd. Để làm cho tệp hàng loạt có thể sử dụng được trên bất kỳ máy tính nào, tôi đặt một biến đường dẫn mà tôi chỉ phải thay đổi ở một nơi để chạy nó trên một máy khác. Vấn đề là con đường có một khoảng trống trong đó. Nếu tôi đặt dấu ngoặc kép xung quanh đường dẫn trong định nghĩa, cmd.exe sẽ đặt chúng xung quanh đường dẫn trước khi nó thêm tên tệp và chuyển đổi và loạt không thành công với "Lỗi cú pháp dòng lệnh". Nếu không có dấu ngoặc kép, nó sẽ không thành công với "không được công nhận là lệnh nội bộ hoặc lệnh bên ngoài, chương trình có thể hoạt động hoặc tệp hàng loạt."

Để thử nghiệm, tôi đang sử dụng công tắc trợ giúp cho đến khi hoặc nếu tôi có thể làm cho nó hoạt động. Tôi có thể thực hiện việc này bằng cách sử dụng tên tệp / thư mục 8.3 (ví dụ: Tài liệu của tôi là MyDocu ~ 1), nhưng có thể thực hiện theo cách khác không?


Dấu ngoặc kép phải chứa đường dẫn với tên tệp và các tham số dòng lệnh phải tuân theo. Bạn có thể cho biết thêm chi tiết về cách tạo dòng lệnh không? Chính xác WAHT Ý anh là bởi> Nếu tôi đặt dấu ngoặc kép quanh con đường trong định nghĩa, puts cmd.exe họ xung quanh con đường trước khi nó gắn thêm tên tập tin và chuyển mạch
vladhorby

Câu trả lời:


104

Hãy thử một cái gì đó như sau:

SET MY_PATH=C:\Folder with a space

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

Đó là những gì tôi đã làm bằng cách sử dụng Thay thế trong Notepad. Cảm ơn bạn.
marcerickson

5
Rất vui vì nó đã giúp. Sẽ thật tốt nếu bạn ủng hộ và chấp nhận bất kỳ câu trả lời nào mà bạn cảm thấy đã giúp được bạn.
aphoria

74

tôi sử dụng

set "VAR_NAME=<String With Spaces>"

khi cập nhật đường dẫn:

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

3
đây phải là câu trả lời được chấp nhận. vì một số lý do, việc gọi set từ một khối if không hoạt động nếu giá trị có khoảng trắng và không được trích dẫn.
Kevin

33

Có hai lựa chọn ở đây. Đầu tiên, bạn có thể lưu trữ đường dẫn chưa được trích dẫn và chỉ cần trích dẫn nó sau:

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

Một tùy chọn khác mà bạn có thể sử dụng là một chương trình con dùng để hủy trích dẫn chuỗi (nhưng trong trường hợp này, nó thực sự không phải là một ý kiến ​​hay vì bạn đang thêm dấu ngoặc kép, loại bỏ chúng và thêm lại lần nữa mà không có lợi):

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

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

Loại %~1bỏ dấu ngoặc kép xung quanh đối số. Điều này có ích khi chuyển các tên thư mục xung quanh được trích dẫn nhưng, như đã nói trước đây, trong trường hợp cụ thể này, đó không phải là ý tưởng tốt nhất :-)


Tôi đã sử dụng phương pháp đầu tiên, sử dụng Thay thế trong Notepad. Cái thứ hai có vẻ phức tạp không cần thiết. Cảm ơn bạn.
marcerickson

2
Tôi có một tệp Batch có các tham số. Sử dụng set LALA=%~1là những gì đã làm việc cho tôi.
JCH2k

Phương pháp thứ 2 làm việc perfeclty khi bạn đang sử dụng subrutines
robe007

16

Thử cái này;

  1. tạo một biến như bên dưới

    SET "SolutionDir=C:\Test projects\Automation tests\bin\Debug"**
    
  2. Sau đó thay thế đường dẫn bằng biến. Đảm bảo thêm dấu ngoặc kép cho phần bắt đầu và kết thúc

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

8

Tôi luôn đặt đường dẫn trong dấu ngoặc kép khi tạo tệp .bat. (Tôi vừa thêm TẠM DỪNG để nó không đóng màn hình.)

Ví dụ:

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

7

Cách thích hợp để làm điều này là như vậy:

@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

Cách dễ nhất để khắc phục sự cố này là đặt tên thư mục trong dấu ngoặc kép:

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

Hy vọng điều này sẽ giúp.


2

Nếu bạn cần lưu trữ đường dẫn vĩnh viễn (đường dẫn không bị thay đổi khi cmd được khởi động lại)

  1. Chạy Command Prompt với tư cách quản trị viên (Nhấp chuột phải vào cmd.exe và chọn chạy với tư cách quản trị viên)

  2. Trong cmd setx path "%path%;your new path" rồi nhập

  3. Kiểm tra xem đường dẫn có được đi đúng không bằng cách nhập đường dẫn và nhấn enter


1
Tôi nghĩ, câu hỏi không phải về biến PATH , mà là về biến đường dẫn . OP rõ ràng muốn lưu trữ một đường dẫn cụ thể vào một biến và sử dụng giá trị trên tập lệnh lô.
Andriy M

1

cũng chỉ cần thử thêm dấu gạch chéo kép như cách này chỉ phù hợp với tôi

set dir = "C: \\ 1. Một số thư mục \\ Một số thư mục khác \\ Chỉ vì"

@echo trên MKDIR% dir%

OMG sau khi đăng, họ đã xóa \ thứ hai trong bài đăng của tôi, vì vậy nếu bạn mở bình luận của tôi và nó hiển thị ba, bạn nên đọc chúng như hai ......

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.