【问题标题】:Creating new files through batch without overwriting the old ones通过批处理创建新文件而不覆盖旧文件
【发布时间】:2016-02-21 12:17:20
【问题描述】:

所以基本上我有这个批处理文件:

@echo off bps -f bps.txt exit

每次我运行批处理时,新的 bps.txt 文件都会覆盖旧文件。我想要的是每次我运行它时,新文件都必须以例如方式出现。 bps1.txt 。如果我再次运行它,它应该以 bps2.txt 的形式出现,依此类推。因此,例如,如果我运行批处理 3 次,我将拥有 bps.txt、bps1.txt、bps2.txt 。

【问题讨论】:

    标签: windows batch-file command-prompt


    【解决方案1】:

    对此没有内置功能。使用计数器,检查文​​件是否存在,如果不增加计数器并重试:

    set "counter="
    :SearchFreeFile
    if exist bps%counter%.txt (
      set /a counter+=1
      goto :SearchFreeFile
    )
    bps -f bps%counter%.txt
    

    【讨论】:

    • 我必须说,这比我的回答优雅得多。
    【解决方案2】:

    循环很耗时。如果您希望文件名是连续创建的,您可以这样做:

    for /f %%a in ('dir /b bps*.txt^|find /c /v ""') do set /a next=%%a
    bps -f bps%next%.txt
    

    这里的for 命令不用于循环 - 它只是将命令的输出保存在%%a 变量中的撇号中。使用dir,我们列出了具有该名称模式的现有文件,find 命令对它们进行计数。因此,如果您已经有 2 个同名文件,则输出将为“2”。

    与您的示例不同,第一个文件将命名为“bps0.txt”,而不是“bps.txt”。如果您想避免这种情况,请改用:

    for /f %%a in ('dir /b bps*.txt^|find /c /v ""') do set /a next=%%a
    if %next% EQU 0 (set bps=bps) else (set bps=bps%next%)
    bps -f %bps%.txt
    

    【讨论】:

    • 我也想过这个。但是,如果某些文件被删除(因为它们是旧的)怎么办?然后,此解决方案可能会覆盖现有文件之一,而不是创建新文件。 (可能是也可能不是问题)
    • 确定最高文件号加一作为下一个枚举是否有帮助?这会留下空白,但这可能是理想的。
    • 很难,因为文件是按字母顺序列出的(1. 10, 11. ...,19, 2, 20, 21, ...)。替代方案:dir /od(最新文件应该是编号最高的文件,但在此期间文件被编辑时,这不再适用。)
    • 是的,我也注意到了这一点。最简洁的方案是将文件命名为 'bps.000'、'bps.001' 等。但是你只能使用 1000 个文件。
    【解决方案3】:

    你可以这样做:

    @echo off
    if not exist "bps.txt" (
    bps -f bps.txt
    exit
    )
    for /l %%i in (1,1,10000) do (
    set "number=%%i"
    if not exist "bps%%i.txt" goto :break
    )
    echo 10000 files with this name already exist
    pause
    exit
    :break
    bps -f bps%number%.txt
    pause
    exit
    

    【讨论】:

      【解决方案4】:

      我的previous answer 获得第一个“免费”计数器 - 如果您删除一些“旧”文件,它将用新文件填补空白。

      另一种方法(有点不寻常,但有效):使用替代数据流来“保存”计数器。为每个实例添加 +1,与可能删除部分(或全部)以前的文件无关(至少在达到整数限制之前)。

      <%~f0:count set /p count=
      set /a count+=1
      (echo %count%)>%~f0:count
      bps -f bps%count%.txt
      

      您可以使用(echo 0)&gt;mybatch.bat:count“重置”计数器

      (注意:不检查,如果文件存在)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-18
        • 2019-03-24
        • 1970-01-01
        • 2013-05-11
        相关资源
        最近更新 更多