awe*_*awe 14 windows batch command-line
当我做某事时,我想写一些状态信息来替换最后一行。
在以下示例 bat 文件中,我希望文本在命令输出的同一行上Step 2覆盖Step 1。
echo off
echo Step 1
REM Do some stuff...
echo Step 2
REM do some other stuff...
Run Code Online (Sandbox Code Playgroud)
该脚本将完全按照您的要求执行:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "ASCII_13=%%a"
set /p "=Step 1" <NUL
REM Do some stuff...
set /p "=!ASCII_13!Step 2" <NUL
REM do some other stuff...
Run Code Online (Sandbox Code Playgroud)
我通过查看 Dave Benham 编写的名为CharLib的批处理脚本字符操作库中的代码找到了这个答案。
该库能够创建 1..255 范围内的所有字符。
有关更多信息,请参阅题为“是否可以将字符转换为其 ASCII 值?”的主题。
编辑 2017-4-26: 上面的代码似乎不再有效。我不确定这种行为何时会改变,但它确实曾经有效。在CR后字符=现在得到由剥离set命令。啊,这似乎是setXP 和更高版本的 Windows 之间工作方式的变化。在 Windows 批处理文件中的Overwrite line 中看到了很好的答案?(重复)了解更多细节和额外的代码示例。
另一种方法是在 之前放置一个非空白字符!ASCII_13!并安排它也被擦除,可能还插入一个退格(不会被剥离)后跟一个空格或在末尾附加空格提示字符串(未被剥离。)
例如像这样:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "ASCII_13=%%a"
set /p "=Step 1" <NUL
REM Do some stuff...
set /p "=x!ASCII_13!Step 2 " <NUL
REM do some other stuff...
Run Code Online (Sandbox Code Playgroud)
要回答这个问题:
@echo off
CALL :EVALUATE "chr(8)"
SET backspace=%result%
<nul set /p =Step 1
:: DO SOME STUFF....
<nul set /p =%backspace%
<nul set /p =2
:: DO SOME OTHER STUFF....
<nul set /p =%backspace%%backspace%%backspace%%backspace%%backspace%%backspace%
<nul set /p =End
GOTO:EOF
:EVALUATE -- evaluate with VBS and return to result variable
:: -- %~1: VBS string to evaluate
:: extra info: http://groups.google.com/group/alt.msdos.batch.nt/browse_thread/thread/9092aad97cd0f917
@IF [%1]==[] ECHO Input argument missing & GOTO :EOF
@ECHO wsh.echo "result="^&eval("%~1") > %temp%\evaluate_tmp_67354.vbs
@FOR /f "delims=" %%a IN ('cscript //nologo %temp%\evaluate_tmp_67354.vbs') do @SET "%%a"
@DEL %temp%\evaluate_tmp_67354.vbs
::ECHO %result%
@GOTO:EOF
Run Code Online (Sandbox Code Playgroud)
输出:
End
Run Code Online (Sandbox Code Playgroud)
基本上,脚本做什么,是写Step 1,然后返回一个地方,覆写1,并在年底进入完全恢复,并覆盖Step 2有End。
这回我用特殊的 ASCII 字符 8 来做,它是退格键。因为我不知道如何在 cmd 中编写它,所以我使用运行 VBS Chr() 函数的 :EVALUATE 函数,并将退格字符放入变量result. 如果有人知道更好的方法,请指教。
| 归档时间: |
|
| 查看次数: |
33035 次 |
| 最近记录: |