Windows cmd:没有新行但使用CR的echo

uib*_*uib 3 windows cmd batch-file

我想在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
Run Code Online (Sandbox Code Playgroud)

这将导致:

echo在文件号1上工作

echo在文件号2上工作

echo工作在3号文件上

...

我希望他们所有人都在同一条线上.我找到了一个删除新行的黑客(例如:Windows批处理:没有换行的回声),但这会产生一个长行.

谢谢!

MC *_* ND 7

@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!"
    )
Run Code Online (Sandbox Code Playgroud)

第一个for命令执行复制操作,该操作在变量内留下回车符.

现在,在文件循环中,每一行都使用一个回显<nul set /p,它将输出提示字符串而不需要换行而不等待输入(我们正在读取nul).但在数据回显中,我们包括先前获得的回车.

但要使其工作,CR变量需要通过延迟扩展来回应.否则它将无法工作.

如果由于某种原因需要禁用延迟扩展,可以使用for命令replaceable参数在没有CR变量的情况下完成此操作

@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"
        )
    )
Run Code Online (Sandbox Code Playgroud)