Windows控制台:将重复的字符串打印到文件

时间:2014-12-22 18:00:09

标签: batch-file cmd repeat

有没有办法解决这个问题:

printf '=%.0s' {1..100} > file.txt

从bash到cmd控制台?

要查看上面的代码看起来是什么here

我可以想到一些变量和for循环的解决方法,但我希望有一个快速简单的解决方案,不需要为有问题的cmd设置“-v”选项(shell由{打开} {1}}据我所知,你不能指定“-v”选项。)

5 个答案:

答案 0 :(得分:1)

使用批量模拟printf并不容易。但是PowerShell确实使用composite strings提供了类似的功能。因此,调用PowerShell,您的printf命令变为:

powershell -command "'='*100" > file.txt

答案 1 :(得分:1)

出于某种原因,我很难打印=符号,但除此之外,这会打印100个-字符并且没​​有终止换行符。我一直在寻找是否有解决方法。

@echo off

(
    for /L %%A in (1,1,100) do (
        <nul set/p =-
    )
)>file.txt

答案 2 :(得分:0)

用一个小技巧,FBnerFP的回答确实如你所愿:

setlocal enabledelayedexpansion
set "x="
for /l %%i in (1,1,100) do set x=!x!=
echo %x%

注意:for变量(x是一位数名称。%variable无法正常工作。

注意:要在命令提示符处使用,请在批处理文件中编写%i而不是%%i

答案 3 :(得分:0)

为了彻底,这是另一种可能性。不过,这是两个班轮。不过,如果你是基准测试,我认为它将比PowerShell解决方案具有速度优势。

set /p "=for(i=100;i--;)WSH.StdOut.Write('=')"<NUL>tmp.js
>file.txt cscript /nologo tmp.js && del tmp.js

或者,对于一分钱,我想是一磅。按如下方式创建 repeat.js

for (i=WSH.Arguments(1); i--; ) {
    WSH.StdOut.Write(WSH.Arguments(0));
}

然后在需要时将其称为cscript /nologo repeat.js "=" 100 >file.txt

答案 4 :(得分:-1)

请参阅For /l

FOR /L %variable IN (start,step,end) DO command [command-parameters]
  

该集是一系列数字因此(1,1,5)将生成序列(5 4 3 2 1)