将文件列表从目录+子文件夹复制到另一个文件夹

Copy list of files from directory+subfolders to another folder

首先,我是一个完全的初学者。我正在尝试一个游戏的终极脚本 bat 文件解决方案。为了不打扰您的细节,让我告诉您我尝试做的事情。

示例:

  1. 我有 17 个文件。其中 10 个为 .jpg,其中 7 个为 .obj 文件。
  2. 图像在路径 \mods\images 中,对象在路径 \mods\models 中。
  3. 我想在 list.txt
  4. 中列出所有 17 个丢失的文件
  5. bat 文件将读取该列表,搜索文件并将它们粘贴到 TTSmissing 文件夹中

这是我的问题:

  1. bat 脚本只查看源路径,但不查看子文件夹(这就是我写 \mods\images\ 来测试它是否有效) 所以 我基本上想要的是: \Tabletop Simulator\Mods\ 作为源路径和 该脚本也应查看所有子文件夹。
  2. list.txt 仅在文件名也有扩展名时才有效。是否可以更改脚本以便我不需要扩展名?所以它只会查找名称并复制文件? (示例:列表中的名称必须像hello123.jpg仅在 hello123 时不起作用.)
  3. 如果我不想要 list.txt 而只是将文件列表直接放入 bat 文件,我该如何更改 bat 脚本?
@echo off
mkdir %USERPROFILE%\Desktop\TTSmissing
set src_folder=%USERPROFILE%\Documents\My Games\Tabletop Simulator\Mods\Images
set dst_folder=%USERPROFILE%\Desktop\TTSmissing
set file_list=%USERPROFILE%\Desktop\list.txt

for /f "tokens=*" %%i in (%file_list%) DO (
    xcopy /S/E "%src_folder%\%%i" "%dst_folder%"
)
pause
@echo off
setlocal

set "src_folder=%USERPROFILE%\Documents\My Games\Tabletop Simulator\Mods"
set "dst_folder=%USERPROFILE%\Desktop\TTSmissing"
set "file_list=%USERPROFILE%\Desktop\list.txt"
set "ext_list=.gif .jpeg .jpg .mp4 .obj .pdf .png .webm"

if not exist "%dst_folder%" md "%dst_folder%"

for /d /r "%src_folder%\" %%A in (*) do (
    pushd "%%~A" && (
        for /f "usebackq delims=" %%B in ("%file_list%") do (
            for %%C in (%ext_list%) do (
                if exist "%%~B%%~C" (
                    echo copy /y "%%~B%%~C" "%dst_folder%\"
                )
            )
        )
        popd
    )
)

您只想复制文件,因此 copyxcopy 更易于使用。该代码将回显 copy 命令以测试它是否按您希望的方式工作。如果满意,去掉 copy 前面的 echo 和 运行 代码,重新做真正的复制过程。

一个for /d /r循环将递归迭代%src_folder%中的子目录。 pushd 将当前目录更改为每个子目录,以便可以相对于源文件工作。

for /f 循环将从 %file_list% 开始迭代每一行。简单的 for 循环将迭代每个 %ext_list%。如果当前“name.extension”存在,则会复制到%dst_folder%.

如果您 set 脚本中的变量名称,通常最好使用 setlocal 来保持脚本局部定义的变量。

要查看命令的帮助,请使用 command /?。这将适用于代码中使用的许多命令。

查看 command /? copyforifsetlocal ...

的帮助