như được thảo luận trong một chủ đề khác How to avoid cmd.exe interpreting shell special characters like < > ^ không dễ dàng nhận tất cả thông số từ dòng lệnh.Làm thế nào để nhận được ngay cả các tham số dòng lệnh lạ nhất?
Một đơn giản
set var=%1
set "var=%~1"
là không đủ, nếu bạn có một yêu cầu như
myBatch.bat abc"&"^&def
tôi có một giải pháp, nhưng nó cần một tập tin tạm thời, và nó cũng không phải là chống đạn.
@echo off
setlocal DisableDelayedExpansion
set "prompt=X"
(
@echo on
for %%a in (4) do (
rem #%1#
)
) > XY.txt
@echo off
for /F "delims=" %%a in (xy.txt) DO (
set "param=%%a"
)
setlocal EnableDelayedExpansion
set param=!param:~7,-4!
echo param='!param!'
Nó không thành công với một cái gì đó giống như myBatch.bat% một, nó hiển thị không phải là % một
trong tình huống này một cách đơn giản echo% 1 sẽ làm việc.
Đó rõ ràng là vòng lặp nhưng tôi không biết cách thay đổi điều này.
Có thể tồn tại một giải pháp đơn giản khác.
Tôi không cần điều này để giải quyết vấn đề thực tế, nhưng tôi thích các giải pháp được chứng minh bằng đạn trong từng trường hợp, không chỉ trong hầu hết các trường hợp.
Điểm đó rõ ràng, rõ ràng là abc "&"^& def sẽ được dịch sang abc "&" & def, nhưng vẫn không thể xử lý bằng tập hợp đơn giản "var =% ~ 1" – jeb
Người dùng sau đó sẽ cần phải dự đoán số lần đối số được sử dụng trong tệp lô để thêm mức thoát thích hợp vào nó. Đó không phải là khá khả thi, tôi đoán ;-) – Joey