2011-07-13 25 views
8

Tôi đang sử dụng một tập tin thực thi để sao lưu. Tôi chuyển các tùy chọn đến một hàm gọi gói thực thi. Điều này hoạt động trừ khi các tham số chứa khoảng trắng. Đây là mã có liên quan:tập tin batch: truyền tham số với khoảng trắng để hoạt động

SET TARGET="%SAVEDIR%\XP.User.Documents.rar" 
SET FILES="%DIRUSER%\Eigene Dateien\*"  
SET EXLUCDE="%DIRUSER%\Documents\CDs" 
call:funcBackup %TARGET% %FILES% %EXLUCDE% 

:funcBackup 
    SET TARGET=%~1 
    SET FILES=%~2 
    SET EXCLUDE=%~3  
    echo."%PACKER% a -r -x"%EXCLUDE%" "%TARGET%" "%FILES%"" 
    ::call %PACKER% a -r -x"%EXCLUDE%" "%TARGET%" "%FILES%" 
goto:eof 

Trên XP (phiên bản tiếng Đức)% DIRUSER% mở rộng để "Dokumente und Einstellungen"

Trong trường hợp mục tiêu là chính xác, nhưng FILES == "Dokumente" và exclude = = "und", có nghĩa là tập lệnh không thành công do khoảng trắng trong% DIRUSER%.

Làm cách nào để khắc phục sự cố này?

Trả lời

12

Vấn đề có vẻ là phong cách của bạn gán các biến.
Tôi cho rằng bạn đặt biến DIRUSER giống như những người khác

set DIRUSER="Dokumente und Einstellungen" 

Nhưng nội dung của DIRUSER là sau đó "Dokumente und Einstellungen", vì vậy có dấu ngoặc kép là một phần của nội dung.

Nhưng sau đó SET FILES="%DIRUSER%\Eigene Dateien\*" mở rộng thành SET FILES=""Dokumente und Einstellungen"\Eigene Dateien\*".

Bạn có thể sử dụng kiểu mở rộng là set.
set "var=content" Điều này đặt nội dung là var thành content mà không có bất kỳ dấu ngoặc kép nào và tất cả các khoảng trống được nối sau dấu ngoặc kép cuối cùng đều bị bỏ qua.

Vì vậy, mã của bạn sẽ là

set "SAVEDIR=D:\backup" 
set "diruser=Dokumente und Einstellungen" 
SET "TARGET=%SAVEDIR%\XP.User.Documents.rar" 
SET "FILES=%DIRUSER%\Eigene Dateien\*"  
SET "EXLUCDE=%DIRUSER%\Documents\CDs" 
call:funcBackup "%TARGET%" "%FILES%" "%EXLUCDE%" 
goto :eof 

:funcBackup 
    SET "TARGET=%~1" 
    SET "FILES=%~2" 
    SET "EXCLUDE=%~3" 
    echo."%PACKER% a -r -x"%EXCLUDE%" "%TARGET%" "%FILES%" 
    ::call %PACKER% a 
goto :eof 
Các vấn đề liên quan