2013-03-06 19 views
2

我有检查根目录每10秒为PDF文件,并将这些文件的确切名称相同的其相应的子文件夹中的批处理文件。批次帮助 - 移动文件到目录(如果存在)的文件名,重命名001

我缺少的是我需要我的批处理文件来检查指定文件的目标子目录,并且如果指定的文件存在,重命名要复制到!filename!001.pdf的新文件并且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 

任何建议如何我可以将文件重命名?

I.e.如果存在于Bob文件夹Bob.pdf和另一Bob.pdf添加到C:\files文件夹,我希望它被复制到C:\files\bob文件夹Bob001.pdf

+1

听起来好像是你试图创造一种[版本控制系统(http://en.wikipedia.org/维基/ Revision_control)。我强烈推荐使用现有的RCS,而不是(如[颠覆(http://subversion.apache.org/),[水银(http://mercurial.selenic.com/),[混帐](HTTP ://git-scm.com/),...)。 – 2013-03-06 14:59:48

+0

这不是一个网站。我的客户有一台没有独立网络功能的旧扫描仪。它扫描文件并将PDF文件放入根目录,我的客户端希望用户扫描的文件进入其主目录而不是普通文件夹。扫描器无法区分用户之间的差异,但它确实提供了命名扫描的选项。我指示每个人在他们的名字和批次之后命名他们的扫描以进行组织。唯一的问题是当前代码移动PDF,但是如果存在相同的命名PDF,则覆盖。 – Brandon 2013-03-06 15:14:13

回答

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个文件。如果子目录达到这个最大值,那么脚本将陷入无限循环。

更新

定格在我最初的脚本错误

+0

感谢您的帮助David。运行脚本时没有任何语法错误,但是这些文件再次被复制并被覆盖 - 正是我列出的脚本的结果。我感谢你的建议/贡献。 – Brandon 2013-03-06 15:29:40

+0

我只是看着它再次,它似乎是你的代码试图不重命名文件,而是要创造一个新的目录。 cmd提示表明,不是重命名文件,而是尝试创建一个名为001的附加子目录。我用文件名Bob.pdf尝试了它。其中IF语句回来这样的: 是否存在“C:\文件\鲍勃\ 001”转到计数 – Brandon 2013-03-06 15:37:38

+0

@Brandon我相信我有固定它。我没有正确设置Name变量。它现在应该工作。 – 2013-03-06 15:40:28

相关问题