scripting - 批量帮助--将文件移动到目录,如果存在文件名,重命名001

标签 scripting batch-file cmd

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

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

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

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

最佳答案

像这样的东西应该可以达到你想要的效果。可能需要一些调整。另外我没有测试过,只是凭内存写的。需要任何解释,尽管询问。

脚本

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

更新

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

关于scripting - 批量帮助--将文件移动到目录,如果存在文件名,重命名001,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15250406/

相关文章:

python - 如何使用 Python 检查用户和密码是否已在 MySQL 数据库中?

bash - 如何将 bash 脚本变量与 sed 一起使用

windows - 在重定向文件 (>output.txt) 中显示带有重音符号的字符

windows - 为什么 Start/Wait 在与 URL 一起使用时不等待?

windows - echo 命令在写入文本文件时是否附加任何额外字符?

c - 为我的代码写一个安装文件

java - 在Android中可以使用哪些编程语言进行开发?

windows - 您可以在兼容模式下运行 Windows 批处理文件吗

用于复制和修改包含重定向字符的文件的 Windows 批处理脚本

powershell - 如何使用脚本中的参数启动一个新的 Powershell 窗口?