0

我需要的是一个批处理文件,它可以读取 txt 文件中的部分文件名。每个文件名都在自己的行上。然后它需要在指定文件夹(包括子文件夹)中搜索该文件,如果找到该文件,则将该文件复制到我桌面上的文件夹中。我找到了一个几乎完全一样的批处理脚本,但是我的文件名不是完整的文件名,只是其中的一部分没有扩展名,并且该脚本搜索确切的文件名。我需要修改此脚本以仅使用文件名的一部分来搜索文件。

@echo off
REM (c) 2013 BY NEUTRON16 (http://www.sevenforums.com/member.php?u=3585)
CLS
TITLE Mass file finder by Neutron16
REM finds files in list.txt file and copies them to C:\your_files
REM CHECK FOR ADMIN RIGHTS
COPY /b/y NUL %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
IF ERRORLEVEL 1 GOTO:NONADMIN
DEL %WINDIR%\06CF2EB6-94E6-4a60-91D8-AB945AE8CF38 >NUL 2>&1
:ADMIN
REM GOT ADMIN RIGHTS
COLOR 1F
ECHO Hi, %USERNAME%!
ECHO Please wait...
FOR /R "%~dp0" %%I IN (.) DO  for /f "usebackq delims=" %%a in ("%~dp0list.txt") do echo d |xcopy "%%I\%%a" "C:\your_files" /e /i
COLOR 2F
ECHO.
ECHO (c) 2013 by Neutron16 (http://www.sevenforums.com/member.php?u=3585)
PAUSE
GOTO:EOF
:NONADMIN
REM NO ADMIN RIGHTS
COLOR 4F
ECHO.
ECHO PLEASE RUN AS ADMINISTRATOR
ECHO.
pause
GOTO:EOF

有人可以帮我修改这个吗?

4

2 回答 2

4
@ECHO OFF 
SETLOCAL ENABLEDELAYEDEXPANSION

SET "DEST_DIR=%USERPROFILE%\Desktop\Folder"
SET "SEARCH_DIR=S:\Class"

FOR /F "tokens=*" %%a IN ('type %~dp0list.txt') DO (
    FOR /R "%SEARCH_DIR%" %%f IN (*%%a*) DO (
        SET "SRC=%%~dpf"
        SET DEST=!SRC:%SEARCH_DIR%=%DEST_DIR%!
        xcopy /S /I "%%~f" "!DEST!"
    )
)

这是对您发布的脚本中的一行(FOR 循环)的修改。

  • 对 中的每一行进行递归搜索list.txt。这是低效的,但如果你想要效率,你可能不会使用纯批处理/CMD。
  • 匹配完成为*<pattern>*,其中 <pattern> 是 中的完整行list.txt
  • tokens=*: 不考虑分隔符,捕获每一行的所有文本作为变量的内容。(这实际上与 相同"delims="。)
  • /S: 不要处理(或创建)空目录
  • SRC用于允许替换以构建目标路径(这是一个目录,而不是文件名 - xcopy 是为目录设计的)。

列表.txt

micro
pipeline
exhaust
于 2013-06-28T12:53:56.693 回答
2

你可以试试这个:

FOR /D /R "%~dp0" %%I IN (*) DO  for /f "usebackq delims=" %%a in ("%~dp0list.txt") do xcopy "%%~I\%%~a" "C:\your_files" /e /i

如需更多帮助展示list.txt

于 2013-06-28T12:44:07.483 回答