批处理帮助 - 将文件移动到目录,如果存在文件名,则重命名为001

时间:2013-03-06 14:48:09

标签: scripting batch-file cmd

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

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

001

有关如何重命名文件的任何建议吗?

即。如果 :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.pdfBob文件夹中添加了另一个Bob.pdf,我希望将其作为{{C:\files文件夹复制到C:\files\bob文件夹中1}}。

1 个答案:

答案 0 :(得分: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个文件。如果子目录达到此最大值,则脚本将陷入无限循环。
  2. <强>更新

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