Tôi chạy ngang qua bài viết này trong kết quả trả về bởi tìm kiếm liên quan đến lệnh IF trong tập tin thực thi, và tôi không thể cưỡng lại cơ hội sửa sai quan niệm rằng khối IF bị giới hạn đơn lệnh. Sau đây là một phần của kịch bản lệnh Windows NT sản xuất chạy hàng ngày trên máy mà tôi đang soạn bài trả lời này.
if "%COPYTOOL%" equ "R" (
WWLOGGER.exe "%APPDATA%\WizardWrx\%~n0.LOG" "Using RoboCopy to make a backup of %USERPROFILE%\My Documents\Outlook Files\*"
%TOOLPATH% %SRCEPATH% %DESTPATH% /copyall %RCLOGSTR% /m /np /r:0 /tee
C:\BIN\ExitCodeMapper.exe C:\BIN\ExitCodeMapper.INI[Robocopy] %TEMP%\%~n0.TMP %ERRORLEVEL%
) else (
WWLOGGER.exe "%APPDATA%\WizardWrx\%~n0.LOG" "Using XCopy to make a backup of %USERPROFILE%\My Documents\Outlook Files\*"
call %TOOLPATH% "%USERPROFILE%\My Documents\Outlook Files\*" "%USERPROFILE%\My Documents\Outlook Files\_backups" /f /m /v /y
C:\BIN\ExitCodeMapper.exe C:\BIN\ExitCodeMapper.INI[Xcopy] %TEMP%\%~n0.TMP %ERRORLEVEL%
)
Có lẽ khối của hai hay nhiều dòng áp dụng riêng cho các kịch bản lệnh Windows NT (file .CMD), bởi vì tìm kiếm các kịch bản sản xuất thư mục của một ứng dụng được giới hạn hàng loạt trường cũ (.BAT) , chỉ tiết lộ một khối lệnh. Kể từ khi ứng dụng đã đi vào bảo trì mở rộng (có nghĩa là tôi không tích cực tham gia hỗ trợ nó), tôi không thể nói cho dù đó là bởi vì tôi không cần nhiều hơn một dòng, hoặc rằng tôi không thể làm cho họ làm việc.
Bất kể, nếu điều sau là đúng, có cách giải quyết đơn giản; di chuyển nhiều dòng vào một tệp lô riêng biệt hoặc một chương trình con của tệp lô. Tôi biết rằng sau này hoạt động trong cả hai loại kịch bản.
Nguồn
2016-06-12 01:29:12
Có thể điều này có thể hữu ích: http://commandwindows.com/batchfiles-branching.htm – esaj
Ya, điều đó có ích. DOS hút. Nếu tôi muốn sử dụng nhiều câu lệnh trong if hoặc else, tôi phải sử dụng && giữa các câu lệnh? hoặc là có một cách thanh lịch hơn? –