2

我有一个批处理文件,它每 10 秒检查一次根目录中的 PDF 文件,并将这些文件复制到它们对应的同名子文件夹中。

我缺少的是我需要我的批处理文件来检查命名文件的目标子目录,如果命名文件存在,重命名要复制到的新文件并在复制!filename!001.pdf重复001文件名时增加 get 。这是我得到的:

    :loop
    setlocal enabledelayedexpansion
    cls

    pushd c:\files\

    for /f "tokens=*" %%1 in ('dir /a-d /b c:\files\*.pdf') do (
    set filename=%%~n1&set dirname=!filename:~0,7!

    dir c:\files /b *.pdf > location1list.tmp
    for /f %%a in (location1list.tmp) do dir c:\files\%%a > location2list.tmp

    if not exist c:\files\!dirname! (md c:\files\!dirname!)
    move %%1 c:\files\!dirname!\>nul
    ) 
    timeout /t 10
    goto:loop

有什么建议可以让我重命名文件吗?

即如果文件夹Bob.pdf中存在Bob并且另一个Bob.pdf被添加到C:\files文件夹中,我希望它被复制到C:\files\bob文件夹中作为Bob001.pdf.

4

1 回答 1

2

像这样的东西应该做你想做的事。可能需要一些调整。我也没有测试过,只是凭记忆写的。需要任何解释,只是问。

脚本

@echo off
setlocal EnableExtensions EnableDelayedExpansion
pushd C:\files

:Main
for /f "tokens=*" %%A in ('dir /a-d /b *.pdf') do (
    if not exist "%%~dpnA\*" md "%%~nA"
    set "File=%%~dpnA\%%~nxA"
    if exist "!File!" call :Name "!File!" File
    echo !File!
    move "%%~fA" "!File!"
)
goto Wait

:Name <Target> <Variable>
set "Count=0"
:Count
set /a "Count+=1"
set "Number=00%Count%"
if exist "%~dpn1%Number:~-3%%~x1" goto Count
set "%~2=%~dpn1%Number:~-3%%~x1"
goto :eof

:Wait
timeout /t 10
goto Main

:End
popd
endlocal

限制

  1. 每个目标子目录在写入时最多只能处理 1000 个文件。如果子目录达到此最大值,则脚本将陷入无限循环。

更新

修复了我的初始脚本中的一个错误

于 2013-03-06T15:22:20.103 回答