我想在 Windows 批处理文件的循环内的同一行上写。 例如:
setlocal EnableDelayedExpansion
set file_number=0
for %%f in (*) do (
set /a file_number+=1
echo working on file number !file_number!
something.exe %%f
)
setlocal DisableDelayedExpansion
这将导致:
echo working on file number 1
echo working on file number 2
echo working on file number 3
. . .
我希望他们都在同一条线上。 我发现了一个删除新行的技巧(例如这里:Windows batch: echo without new line),但这会产生一条长线。
谢谢!
最佳答案
@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%a in ('copy "%~f0" nul /z') do set "CR=%%a"
set "count=0"
for %%a in (*) do (
set /a "count+=1"
<nul set /p ".=working on file !count! !CR!"
)
第一个for
命令执行复制操作,在变量内留下一个回车符。
现在,在文件循环中,每一行都使用 <nul set /p
回显这将输出没有换行且不等待输入的提示字符串(我们正在阅读 nul
)。但在回显的数据中,我们包含了之前获得的回车符。
但要让它工作,CR
变量需要与延迟扩展相呼应。否则将无法正常工作。
如果出于某种原因你需要禁用延迟扩展,这可以在没有 CR 变量的情况下使用 for
来完成。命令可替换参数
@echo off
setlocal enableextensions disabledelayedexpansion
for /f %%a in ('copy "%~f0" nul /z') do (
for /l %%b in (0 1 1000) do (
<nul set /p ".=This is the line %%b%%a"
)
)
关于窗口命令 : echo without new line but with CR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25773052/