代码之家  ›  专栏  ›  技术社区  ›  cameron carlson

需要一个批处理文件将所有txt文件复制到一个子文件夹,如果已经存在,则重命名

  •  1
  • cameron carlson  · 技术社区  · 7 年前

    我有多个文本文件,将进入一个文件夹,我正在处理成一个单一的输出文件。批次将每隔几个小时运行一次。

        for %%f in (*.txt) do type "%%f" >> ESOComplete\ESOInput.txt
    

    从那里我需要一个移动所有文件(例如510002.txt)到一个子文件夹称为ESOMoved。将根文件夹保留为空,以便下次批处理运行时不会将相同的数据添加到esoint.txt中

    2.

    1.将所有文本从所有.txt文档移动到一个输出文件。(已经完成)

    2 回复  |  直到 7 年前
        1
  •  1
  •   user6811411 user6811411    7 年前

    编辑 如果附加了 2

    @Echo off
    :: Start in base folder
    PushD "Q:\Test\2017\07\22"
    
    for %%f in (??????.txt) do (
        type "%%f" >> "ESOComplete\ESOInput.txt"
        If Not Exist "ESOMoved\%%f" (
            Move "%%f" "ESOMoved\"
        ) Else (
            Set Num=2
            Call :Move "%%f" 
        )
    )
    PopD
    Goto :Eof
    :Move
    Set "NewName=ESOMoved\%~n1%Num%%~x1"
    If Not Exist "%NewName%" (
    Echo Move %1 "%NewName%"
         Move %1 "%NewName%" >Nul 2>&1
         Exit /B 0
    )
    Set /A Num+=1
    Goto :Move
    
        2
  •  0
  •   lit    7 年前

    将此文件另存为 esomover.ps1

    $files = Get-ChildItem -Path 'C:/src/t/ESO/' -File -Filter 'file*.txt'
    
    $sum_file = 'C:/src/t/ESO/ESOComplete/ESOInput.txt'
    $arch_dir = 'C:/src/t/ESO/ESOArchive'
    
    if (-not (Test-Path -Path $sum_file)) { New-Item -Path $sum_file -ItemType File }
    
    foreach ($file in $files) {
        Add-Content -Path $sum_file -Value (Get-Content $file.FullName) -Encoding Ascii
        if (-not (Test-Path "$($arch_dir)/$($file.Name)")) {
            Move-item $file.FullName $arch_dir
        } else {
            $i = 0
            $nfn = ''
    
            do {
                $nfn = "$($file.BaseName)-$($i.ToString()).txt"
                $i++
            } while (Test-Path -Path "$($arch_dir)/$($nfn)")
    
            Move-Item $file.FullName "$($arch_dir)/$($nfn)"
        }
    }
    

    从cmd运行此脚本。exe shell或.bat文件使用:

    powershell -noprofile -file .\esomover.ps1