【问题标题】:Reading off a text list and copying files from another folder using batch file使用批处理文件读取文本列表并从另一个文件夹复制文件
【发布时间】:2021-02-09 00:04:44
【问题描述】:

我正在尝试从另一个目录中读取包含我想要的 .jpg 名称列表的 .txt 文件,然后将这些文件复制到当前目录。文本文件的名称不能硬编码,因为我打算为数百个文件夹使用同一个批处理文件,每个文件夹都有自己唯一的 .txt 列表。

我试过了:

FOR /F %%a in ("*.txt") do (
    FOR /F "delims=" %%N in (%%a) do COPY "C:\Files\%%N.jpg" %cd%
)

第二个 For 循环在与硬编码的 .txt 单独使用时起作用。

对不起,如果这是一个新手错误,我是 cmd 行的新手。

【问题讨论】:

  • /F 选项用于读取文件。你为什么使用 /D?
  • 糟糕,我认为这是之前的尝试。将其更改为 /F,但仍然无法正常工作。我认为它以某种方式将“.txt”作为文字,因为它返回“.txt”而不是 cmd 中的 .txt 文件的名称
  • 这正是它正在做的事情。再次查看for /? 的输出。当usebackq 未作为选项列出时,双引号用于处理字符串,单引号用于处理命令,没有引号用于处理文件。
  • 我用它来检查第一个循环:For %%a in (*.txt) do (echo %%a) 它正确地返回了文件名。当在第二个循环中使用完全相同的文件名作为 %%a 的硬编码值时,它也可以工作。但是,当一起使用时,它似乎仍然不起作用。目前我没有使用任何带有 %%a 的引号。
  • 调用每个文本文件 filelist.txt 或像 files.list 这样更模糊的东西有什么问题?没有理由给每个文件一个完全不同的名称,因此名称未知!

标签: batch-file cmd


【解决方案1】:

这是一个替代方案,只使用一个循环:

对于

For /F "EOL=? Tokens=*" %G In ('%SystemRoot%\System32\findstr.exe "^" *.txt') Do @Copy /Y "C:\Files\%~G.jpg"

对于

@For /F "EOL=? Tokens=*" %%G In ('%SystemRoot%\System32\findstr.exe "^" *.txt') Do @Copy /Y "C:\Files\%%~G.jpg"

顺便说一句,您自己的代码应该看起来更像这样,(按照 cmets 中的建议使用 UseBackQ,尤其是当它们的名称包含有问题的字符时:

对于

For %G In (*.txt) Do @For /F "UseBackQ Tokens=*" %H In ("%G") Do @Copy /Y "C:\Files\%~H.jpg"

对于

@For %%G In (*.txt) Do @For /F "UseBackQ Tokens=*" %%H In ("%%G") Do @Copy /Y "C:\Files\%%~H.jpg"

您会注意到,在这两种示例类型中,我都省略了目标目录,当您这样做时,目标目录将默认为当前目录。

【讨论】:

    【解决方案2】:

    我找到了有效的语法:

    For %%a in (*.txt) do (
        For /f "delims=" %%N in (%%a) do COPY "C:\Files\%%N.jpg" %cd%
    )
    

    【讨论】:

      猜你喜欢
      • 2014-03-21
      • 2010-11-02
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多