如何根据文件名的一部分将搜索中的文件复制到某些文件夹

问题描述 投票:0回答:1

我有一个充满 pdf 文件的目录,其名称如

1024 Billy Bloggs report.pdf

然后我有很多以下形式的目录:

1024-Bloggs Case

我需要将根目录中的所有文件移动到各自的目录中。正如前面所描述的,有人在文件中搜索该号码,然后与具有相同标识符的目录名称进行匹配,然后移动文件。

我已经尝试了以下几种形式,但是似乎无法将通配符传递给

dir
命令。

我还将所有文件名编号输出到 TXT 文件,并尝试打开该文件,抓取编号,然后用它来搜索文件名,然后搜索目录名称并应用

move
copy
命令.

FOR /f "delims=" %G in (folderlist.txt) DO copy %G*.pdf %G**.*

但是,这会搜索

%G*.pdf
,但第二部分不起作用。

我尝试设置

copy
的变量,但不起作用,并说“系统找不到指定的文件”。看来,即使
Source
Dest
变量表示它正在收集正确的
dir
搜索,但它不会将相同的输出传递给
Copy
命令。

这是我当前的代码,任何帮助都会非常感谢。

@echo on
FOR /f "delims=" %%G in (folderlist.txt) DO (
    FOR /F "delims=" %%H IN ('dir "%%G*" /s/b/a-d') DO SET Source=%%H
    FOR /F %%I IN ('dir %%G* /s/b/ad') DO SET Dest=%%I
    copy %Source% %Dest%
    Pause
)))
for-loop batch-file cmd
1个回答
0
投票

我会这样做(我想)

实际上取决于识别因素是否是,例如,

1024
,并且相同的
1024
对于启动目录名是唯一的。例如,
103
将匹配
103 fred directory
以及
1035 george directory

@ECHO OFF
SETLOCAL
rem The following settings for the source directory and filename are names
rem that I use for testing and deliberately include names which include spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.

SET "sourcedir=u:\your files"
SET "destdir=u:\your results"

FOR /f "delims=" %%e IN ('dir /b /a-d "%sourcedir%\*.pdf" 2^>nul ') DO (
 REM %%e contains the source filename
 FOR /f "tokens=1" %%b IN ("%%e") DO (
  rem %%b contains prefix
  FOR /f "delims=" %%y IN ('dir "%destdir%\%%b*" /s/b/ad 2^>nul') DO (
   ECHO MOVE "%sourcedir%\%%e" "%%y\"
  )
 )
)

GOTO :EOF

%%e
从源目录获取所有
.pdf
名称。

%%b
然后选取文件名的第一个标记。
tokens=1
实际上是多余的,因为
tokens=1
是默认值,而 Space 是默认分隔符(请参阅 docco 提示中的 `for /?)

然后在树中查找以

%%b
开头的目录名称,并将完整目录名称分配给
%%y

ECHO
所需的
move
命令,注意目标包括
\
以指示目标是目录,而不是文件。请注意引号以处理包含空格的文件/目录名。

© www.soinside.com 2019 - 2024. All rights reserved.