我正在創建一個批處理文件,它將調用其他一些批處理文件。其中一個要調用的批處理文件中有一個「CLS」。有沒有什麼方法可以讓包裝批處理文件忽略子項「CLS」調用,同時仍然允許CLS在從命令行直接調用子批處理文件時工作?批處理文件 - 忽略子批處理文件中的CLS
2
A
回答
4
這裏是一個真正的醜陋的黑客:-)如果stdout
被重定向到con:
的CLS屏幕命令不起作用 - 它打印換頁符(0x0C)到屏幕上。在我的機器上,它看起來像女性的象徵。
@echo off
:: Normal call, CLS in called batch clears the screen
call batch2
:: Redirected call, CLS in called batch prints <FF> character to screen (without newline)
call batch2 >con:
優點 - 無需修改您的子腳本。
缺點 - 不想要的<FF>
字符出現在輸出中。
1
您可以創建一個臨時批處理文件,所有cls
命令已經ingnored:
setlocal enabledelayedexpansion
set target=targetname.bat
for /f "usebackq delims=" %%a in ("%target%") do (
set line=%%a
Echo !line:cls=Rem Cls! >> temp_%target%
Echo !line:CLS=Rem Cls! >> temp_%target%
Echo !line:Cls=Rem Cls! >> temp_%target%
Rem Include CLs ClS cLS, etc. if the person who wrote the file is not case consistent
Rem : (
set line=
)
call temp_%target%
set target=
Endlocal
這應該做你想要什麼完美。
蒙娜麗莎
2
嗯 - 挺多久IS一條繩子?
一般情況下,你可以在你的CALL
版批量試試這個:
@echo off
setlocal
set skipcls=%1
if defined skipcls (if "%skipcls%"=="::" (shift) else (set "skipcls="))
...
%SKIPCLS% cls
...
然後打電話給你批一個額外的第一個參數::
如果第一個參數是::
它會被移出並skipcls
將被設置爲::
;否則skipcls
將是空的,因此%skipcls% CLS
線將被跳過或執行...
修訂:
也許
@echo off
setlocal
if "%~1"=="::" (shift&set "skipcls=REM ") else (set "skipcls=")
...
%SKIPCLS% cls
...
會更簡單。將skipcls
設置爲REM SPACE而不是::
將允許在括號內的結構中更加可靠地使用該技術。
當然,另一種方法是在調用程序中適當地設置skipcls
。
或者設置skipcls
到你喜歡和使用
if [not] defined skipcls ...
一樣,如果它的設置做到這一點,它支持結構,如果不做任何非空值。
當然,它並不侷限於CLS
,所以應該使用不同的變量名稱。
如果你真的喜歡冒險的感覺,你可以在主叫方設置redirect
到>>"a_filename"
,然後有
%redirect% ECHO whatever
轉向輸出到外部controled目的地。
似乎是許多方法來應用一個簡單的概念。
相關問題
- 1. 將批處理文件包含在批處理文件中
- 2. 如何從批處理文件中調用批處理文件?
- 3. Oracle在批處理文件中導入批處理文件
- 4. 在批處理文件中運行幾個批處理文件
- 5. 批處理文件「」
- 6. 批處理文件
- 7. 批處理文件
- 8. 批處理文件
- 9. 清理批處理文件
- 10. 批處理文件不會在批處理文件
- 11. 批處理文件,創建另一個批處理文件
- 12. 批處理文件:另存爲批處理文件(.cmd)
- 13. 從另一個批處理文件運行批處理文件
- 14. 如何從批處理文件調用批處理文件
- 15. 從另一個批處理文件更新批處理文件
- 16. 將批處理文件寫入批處理文件
- 17. 批處理文件,使另一個批處理文件執行
- 18. 從C批處理文件運行批處理文件#
- 19. 批處理文件,寫入另一個批處理文件
- 20. 批處理文件 - 關閉通過批處理文件過程
- 21. 批處理文件VBScript中
- 22. 批處理文件條件
- 23. 批處理文件的GUI?
- 24. 批處理文件的Windows
- 25. curl的批處理文件
- 26. 忽略批處理文件中的模式
- 27. CMD忽略批處理文件中的%符號 - 爲什麼?
- 28. 如何在批處理VBA中的文件時忽略警告
- 29. 批處理文件命令/處理
- 30. Windows批處理文件處理 - 循環
用戶想知道如何避免忽略'cls'而不需要手動做到這一點:如果他想這樣做,他可以在記事本中做'Ctrl + H'並用'Rem cls'或' :: cls'。此外,爲什麼他會這麼做呢,因爲與'::'或'rem'相比,鍵入'%SKIPCLS%'要長很多且平淡無奇。來自我的'-1'。 – Monacraft
@Monacraft - 至少Magoo的解決方案是參數化的。可以在啓用或禁用CLS的情況下調用相同的腳本,而無需更改代碼;只是CALL需要改變。但是可選地將變量CLS定義爲CLS或未定義更簡單。然後在腳本的主體中簡單地使用%CLS%。 – dbenham