2013-01-16 8 views
21

Tôi đang viết một tập tin batch mà tôi cần xuất ra một chuỗi chứa '!' sang một tệp khác. Nhưng khi tôi lặp lại chuỗi đó với một tệp khác, nó sẽ xóa "!" từ đầu ra.Sự khác biệt giữa biến% biến% và! trong tập tin thực thi

Ví dụ: Input:

set LINE=Hi this is! output 
echo !LINE!>>new_file.txt 

Output trong new_file.txt là:

Hi this is output 

Ngoài ra, nếu đầu vào là

set LINE=Hello!! this is output!! 
echo !LINE!>>new_file.txt 

Output trong new_file.txt:

Hello 

Do đó, nó bỏ qua! (Dấu chấm than) từ đầu ra đến new_file. Nếu tôi sử dụng% LINE%, thì nó chỉ hiển thị "echo is on" thành tệp đầu ra.

Vui lòng đề xuất cách khắc phục sự cố này.

+1

Khi 'echo% ĐƯỜNG DÂY%' đầu ra 'echo là on' thì bạn phải ở trong một khối. Bạn nên thêm một chút mã của mình – jeb

+1

Câu hỏi này rất gây hiểu lầm, bạn không muốn biết sự khác biệt, bạn muốn biết cách thoát khỏi nó ... –

Trả lời

15

Nếu bạn đã trì hoãn việc mở rộng được kích hoạt và muốn xuất dấu chấm than, bạn cần phải thoát khỏi nó.

Việc thoát dấu chấm than không cần, một hoặc hai dấu mũ, tùy thuộc vào vị trí.

@echo off 
set test1=Test1! 
setlocal EnableDelayedExpansion 
set test2=Test2^^! 
set "test3=Test3^!" 

echo !test1! 
echo !test2! 
echo !test3! 

Sự khác biệt giữa !var!%var% trong khối được giải thích tại DOS batch: Why are my set commands resulting in nothing getting stored?

Giải thích về phân tích cú pháp hàng loạt có thể được tìm thấy tại How does the Windows Command Interpreter (CMD.EXE) parse scripts?

4

Có vẻ như bạn đã gọi số SETLOCAL EnableDelayedExpansion ở đâu đó cao hơn trong mã. Hãy xem here để xem những hiệu ứng từ đó là gì.

+0

Cảm ơn bạn đã trả lời. Có, tôi đang sử dụng tài sản trong tập tin của tôi như mã này là trong vòng lặp for và cũng tôi đang thực hiện một số tìm/thay thế operatios trên chuỗi này vì vậy tôi phải sử dụng nó. – Vishal

+0

@User liên kết tôi đã gửi cho bạn giải thích tốt về các tác dụng phụ của điều đó. Tôi hy vọng nó sẽ giúp bạn hiểu được hành vi bạn đang quan sát. –