Batch file 批处理文件脚本,用于将文件(文本文件中的输入行)从一个文件夹复制到另一个文件夹

Batch file 批处理文件脚本,用于将文件(文本文件中的输入行)从一个文件夹复制到另一个文件夹,batch-file,copy,text-files,Batch File,Copy,Text Files,我有一个文本文件示例(如下所示),其中包含文件夹中不同文件的名称 文件名1 文件名2 文件名3 现在,我必须使用这个文本文件作为输入,将D:\drive中的文件(文件名取自文本文件)复制到另一个文件夹。下面给出了我使用的批处理文件 @Echo Off SetLocal EnableDelayedExpansion Set n= 0 Set _InTextFile=D:\EXAMPLE.txt For /F "tokens=*" %%I IN (%_InTextFile%) DO ( S

我有一个文本文件示例(如下所示),其中包含文件夹中不同文件的名称

文件名1

文件名2

文件名3

现在,我必须使用这个文本文件作为输入,将D:\drive中的文件(文件名取自文本文件)复制到另一个文件夹。下面给出了我使用的批处理文件

@Echo Off

SetLocal EnableDelayedExpansion

Set n= 0
Set _InTextFile=D:\EXAMPLE.txt

For /F "tokens=*" %%I IN (%_InTextFile%) DO (

Set /a n+=1

Set _var!n!=%%I

set VAR=init

for /f %%a in ('dir /b D:\%%I.asc') do set VAR=exists

if %VAR%==exists

xcopy * D:\New folder

)

Set _

EndLocal

cmd /k
不幸的是,这个批处理脚本没有像我预期的那样工作。它不会将特定文件复制到新文件夹位置。此外,它还被打印为

参数数无效

请尝试帮助我确定批处理脚本中的确切问题。如何修改此脚本以仅将D:\drive中的这些特定文件(如示例文本文件所示)复制到D:\New文件夹


提前感谢您的帮助

使用For.exe命令时出错。您可以键入/?在命令行中查看使用它的三种方法。使用它的方式是获取文件的属性,而不是文件中的数据

REM Im trying to get FileSize or some other info about the file itself.
For /F "tokens=*" %%I IN (%_InTextFile%) DO ...

REM Should be this to process the file line by line.
For /F "UseBackQ tokens=*" %%I IN (%_InTextFile%) DO ...
  • 通过使Dir.exe命令更安全,使整个脚本“更安全” 显式\特定的。将其设置为Dir/A-D/B,以便不列出文件夹

  • 如果%VAR%==存在,则需要删除!瓦尔!用于动态行为


  • 4 XCopy命令没有使用从过程中获得任何好处。它现在写的方式也很危险,可能会移动你不想移动的文件。

    我可以通过修改我的代码来解决这个问题,如下所示

    @Echo Off
    
    SetLocal EnableDelayedExpansion
    
    Set n= 0
    Set _InTextFile=D:\EXAMPLE.txt
    
    For /F "tokens=*" %%I IN (%_InTextFile%) DO (
    
    Set /a n+=1
    
    Set _var!n!=%%I
    
    set VAR=init
    
    for /f %%a in ('dir /b D:\%%I.asc') do set VAR=exists
    
    if %VAR%==exists
    
    xcopy * D:\New folder
    
    )
    
    Set _
    
    EndLocal
    
    cmd /k
    
    set destinationfolder=D:\New folder

    对于/F“delims=”(E:\EXAMPLE.txt)DO XCOPY/I/S/Y“%%a”“%destinationfolder%\%%~nxa”


    这对我非常有效

    谢谢你的建议。实际上,我试着先获取文件的属性,打印它,然后只做了一个xcopy语句来复制特定的文件。正如我在下面的回答中所解释的那样,只要修改for循环,我就能够轻松地解决这个问题。感谢您的建议、宝贵的时间和考虑。