根据部分文件夹名称

时间:2016-02-22 05:13:10

标签: sorting batch-file pdf directory

我已经在网上研究了这个网站和其他许多网站,但我还没有弄清楚我需要什么才能完成这项任务。

我所拥有的是一个包含1000个PDF文件的文件夹。每个PDF都是健身房会员表,其中包含健身会员的姓名和文件名中的开始日期。我需要将这些PDF移动到已包含子文件夹的主文件夹。这些子文件夹与健身房成员的名称相匹配,但它们不包含日期。但是,它们包含括在括号中的特定代码。

实施例: 我的GymForms文件夹包含1000个PDF。 (源文件夹) C:\用户\ BlackPC \桌面\ GymForms

Alan Givens - H-9 1-16-2016.pdf

Jane Doe - H-9 7-10-2015.pdf

John Henry - H-9 1-16-2016.pdf

William Falls - H-9 7-10-2015.pdf

我的主文件夹(目标文件夹)包含具有健身房成员名称的子文件夹。 C:\用户\ BlackPC \桌面\ ActiveMembers

艾伦·吉文斯(33U)

Jane Doe(05R)

John Henry(05S)

威廉·福尔斯

所以下面的批处理文件就是我所拥有的(从另一个用户的帖子中修改过)...如果成员文件夹(目标文件夹)不包含任何括号,它将起作用。换句话说,当批处理执行时,Alan Givens,Jane Doe和John Henry的PDF将不会移动/排序到各自的文件夹中。但是成员“William Falls”的PDF将排成正确的文件夹,没有任何问题。

所以我希望有人可以帮助我修复它并让它做我想做的事情?本质上我需要调整这个批处理文件,这样当目标文件夹在名称中包含括号时,PDF仍然可以排序。或者,批量文件被调整,以便根据文件夹名称的前9个字符将PDF分类到目标文件夹中?

提前致谢!

-BATCH FILE -

@echo off

setlocal enableextensions disabledelayedexpansion

pushd "C:\Users\HPC6250\Desktop\GymForms"

for /d %%I in (C:\Users\HPC6250\Desktop\ActiveMembers\*) do (

for %%F in (*) do (

    for /f %%A in ('echo %%~nF ^| find /i "%%~nI"') do (

        set /p a="Moving %%F to %%I... "<NUL

        move "%%F" "%%I" >NUL

        echo Done.

    )

  )

)

popd

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir\t w o"
SET "destdir=U:\destdir"
FOR /f "delims=" %%I IN (
  'dir /b /ad "%destdir%\*" '
 ) DO (
 FOR /f "tokens=1delims=(" %%s IN ("%%~I") DO (
  IF EXIST "%sourcedir%\%%s*" ECHO(MOVE "%sourcedir%\%%s*" "%destdir%\%%I\"
 )
)

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。

为了测试目的,所需的MOVE命令仅为ECHO在您确认命令正确后,将ECHO(MOVE更改为MOVE以实际移动文件。附加>nul以取消报告消息(例如1 file moved

将目标子目录的目录列表读入%%I

tokenise %%I使用(作为分隔符,第一部分(最多但不包括分隔符)到%%s

如果名为%%s*的来源中的文件将其移至目的地+找到的目录的全名

我想知道你打算如何处理两个&#34; John Smith&#34; s。