我需要的是一个批处理文件,它读取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
有人可以帮我修改吗?
答案 0 :(得分: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>*
完成,其中&lt; pattern&gt;是list.txt
。tokens=*
:无论分隔符如何,都将每行上的所有文本捕获为变量的内容。 (这实际上与"delims="
相同。)/S
:不处理(或创建)空目录SRC
用于允许替换构建目标路径(这是一个目录,而不是文件名-xcopy是为目录设计的)。<强> LIST.TXT 强>:
micro
pipeline
exhaust
答案 1 :(得分: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
。