Tôi đang viết một tập lệnh lệnh bó trong đó các biến môi trường được kiểm tra. Tôi cần viết một vòng lặp FOR bằng cách chuyển tất cả các biến bắt buộc và sau đó xác minh xem nó có được xác định hay không và nếu không, hãy nhắc giá trị của khóa và đặt biến vĩnh viễn.
Vấn đề là tôi không thể hủy đăng ký biến vòng lặp và kiểm tra nó trong các biến môi trường.
Mã mẫu như sau:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
ĐỐI VỚI %%G IN (JBOSS_HOME, JAVA_HOME, ANT_HOME, PERFORCE_PATH, P4CLIENT) LÀM (
ECHO.
Mục vòng lặp ECHO: %%G
:: Gọi một hàm bằng cách gửi từng giá trị để kiểm tra xem nó có được đặt trong Biến MÔI TRƯỜNG hay không, nếu không thì hãy liên tục thêm nó vào.
GỌI:xác thựcAndUpdate %%G
)
GOTO:EOF
:xác nhậnAndUpdate
:: Bây giờ tôi phải kiểm tra xem giá trị được truyền có sẵn trong biến MÔI TRƯỜNG hay không
:: echo %~1 sẽ in giá trị như JBOSS_HOME
:: Điều kiện IF bên dưới luôn thay thế thành IF ("JBOSS_HOME" == []) và nó luôn trả về true
:: nhưng không thể tìm thấy cú pháp để sử dụng nó để tham chiếu DE và kiểm tra xem khóa đó đã được đặt chưa.
:: Ví dụ: IF %JBOSS_HOME% == []
IF ("%~1" == []) (
ECHO.
ECHO. %~1 trống
SET /p value="Nhập giá trị cho '%~1' : "
:: Đặt liên tục cặp giá trị khóa đó bằng SETX
SETX %~1 "%value%"
) KHÁC (
ECHO.
ECHO %~1 có sẵn dưới dạng biến MÔI TRƯỜNG.
)
GOTO:EOF
NỘI BỘ
Để kiểm tra xem một biến có được xác định hay không, hãy sử dụng nếu như
được sử dụng trong các phát biểu được xác định
关键字。 giúp đỡ nếu
Tìm hiểu thêm.
Nếu tôi có thể đưa ra một đề xuất khác, sẽ tốt hơn nếu hiển thị bộ chọn thư mục cho người dùng thay vì yêu cầu anh ta nhập tên đường dẫn theo cách thủ công. Để làm điều này, hãy lưu bằng chứng về khái niệm này dưới dạng .bat
tiện ích mở rộng và dùng thử. Xem liệu nó có hoạt động như bạn muốn không:
@if (@a==@b) @end /* Nhận xét nhiều dòng JScript
:: dựa trên https://stackoverflow.com/a/15906994/1683264
::phần lô
@echo off
mở rộng kích hoạt setlocal
đối với %%G in (windir, temp, foo, bar) do (
nếu không được xác định %%G (
gọi :chooser %%G "Định vị thư mục cho %%G."
) khác echo %%G đã được xác định là !%%G!
)
goto :EOF
:chooser
for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "%~2"') làm (
rem ::!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!
rem :: Xóa "echo" khỏi dòng tiếp theo này khi bạn hài lòng
rem :: rằng nó sẽ làm được những gì bạn dự định.
rem ::!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!
echo setx %~1 "%%~I"
)
goto :EOF
::Phần JScript */
var shl = new ActiveXObject("Shell.Application");
thư mục var = shl.BrowseForFolder(0, WSH.Arguments(0), 0, 0x00);
WSH.Echo(thư mục ? folder.self.path : '');
Sau khi bạn hài lòng rằng mô phỏng đang hoạt động như bạn mong đợi, hãy bắt đầu với :người chọn
Xóa trong chương trình con tiếng vang
.
Nhìn thấy trang nàyĐể biết thêm cách khởi chạy bộ chọn tệp hoặc thư mục từ tập lệnh .bat, hãy xem ý chính GitHub nàyThêm chi tiết và nhiều ví dụ hơn về kết hợp JScript/batch.
Về lệnh bó Windows: Cách hủy đăng ký biến vòng lặp FOR để kiểm tra xem biến đó có được THIẾT LẬP trong Biến môi trường hay không, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/27475403/
Tôi là một lập trình viên xuất sắc, rất giỏi!