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

时间:2020-04-23 18:51:48

标签: batch-file xcopy tabletop-simulator

首先,我是一个初学者。我正在尝试一款游戏的最终脚本蝙蝠文件解决方案。为了不让您烦恼细节,让我告诉您我想做什么。

示例:

  1. 我有17个文件。其中10个是.jpg文件,其中7个是.obj文件。
  2. 图像位于路径\mods\images中,对象位于路径\mods\models中。
  3. 我想在list.txt中列出所有17个丢失的文件
  4. 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

1 个答案:

答案 0 :(得分:1)

@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命令,以测试它是否按照您的要求工作。如果满意,请删除复制前的echo,然后再次运行代码以执行实际的复制过程。

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

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

如果您在脚本中set个变量名,通常最好使用setlocal将定义的变量保留在脚本本地。

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

查看command /?copyforif的{​​{1}}帮助...

相关问题