我正在创建一个批处理文件,它将调用其他一些批处理文件。其中一个要调用的批处理文件中有一个“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