Here's one interesting thread. Và tôi đã cố gắng chơi với hai điều được thảo luận ở đó.Tại sao CALL in thông báo trợ giúp GOTO trong tập lệnh này? Và tại sao lệnh sau đó được thực hiện hai lần?
- Bạn có thể truy cập các nhãn có ký hiệu đặc biệt với mở rộng gấp đôi.
- Nhãn có chứa
/?
không thể sử dụng được vìGOTO
vàCALL
in thư trợ giúp của họ thay vì thực thi.
Và đây là kết quả:
@echo off
setlocal enableDelayedExpansion
set "label=/?"
call :%%label%%
echo == Test message to check if the CALL or GOTO (or neither) command is executed ==
exit /b 0
:/?
echo == CALL or GOTO has been executed ==
exit /b 0
Và kết quả:
Directs cmd.exe to a labeled line in a batch program.
GOTO label
label Specifies a text string used in the batch program as a label.
You type a label on a line by itself, beginning with a colon.
If Command Extensions are enabled GOTO changes as follows:
GOTO command now accepts a target label of :EOF which transfers control
to the end of the current batch script file. This is an easy way to
exit a batch script file without defining a label. Type CALL /? for a
description of extensions to the CALL command that make this feature
useful.
== Test message to check if the CALL or GOTO (or neither) command is executed ==
== Test message to check if the CALL or GOTO (or neither) command is executed ==
Và mã sau CALL
được thực hiện hai lần ??
EDIT
này thậm chí còn không thể giải thích với tôi:
@echo off
setlocal enableDelayedExpansion
set "label=/?"
set /a x=1
call :%%label%% >nul
set /a x=x+1
echo ---
echo -%x%-
echo ---
exit /b 0
:/?
echo == CALL or GOTO has been executed ==
echo == first argument : %1 ==
exit /b 0
Đầu ra là:
---
-3-
---
Mã này sau khi cuộc gọi của CALL
chắc chắn được thực hiện hai lần , nhưng đầu ra của lần chạy đầu tiên có thể được chuyển hướng trong cùng một dòng?
Điều này làm cho điều này trở nên phức tạp hơn (nếu có thể) là nếu bạn thêm '& pause' sau khi' call' nó lặp lại mọi thứ một lần, tạm dừng và lặp lại nó ** sau ** tạm dừng! – Monacraft