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

问题描述 投票:0回答:1

首先,我是一个完全的初学者。我在尝试一个游戏的终极脚本蝙蝠文件解决方案。为了不在细节上烦扰你,让我告诉你我尝试做了什么。

举个例子。

  1. 我有17个文件 其中10个是.jpg,7个是.obj文件。
  2. 这些图片的路径是 \mods\images 和对象在路径上 \mods\models.
  3. 我想把所有17个缺失的文件都列在一个列表里 list.txt
  4. 该bat文件将读取该列表,搜索文件并将它们粘贴到 TTSmissing 夹子

我的问题是这样的。

  1. 蝙蝠脚本只能精确地查看源路径,但不能查看子文件夹(所以我才写 \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
batch-file xcopy
1个回答
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
    )
)

你只是想复制文件,所以 copy 使用起来比 xcopy. 该代码将呼应 copy 命令来测试它是否按照您的要求工作。如果满意,将 echo 在copy前面再运行代码,进行实际的复制过程。

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

for /f 循环将迭代每一行从 %file_list%. 简单的 for 循环将迭代每个 %ext_list%. 如果当前"名称.扩展名"存在,它将被复制到 %dst_folder%.

如果你 set 脚本中的变量名,通常最好是使用 setlocal 来保持脚本中定义的变量在本地。

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

查看 command /? 帮助 copy, for, if, setlocal ...

© www.soinside.com 2019 - 2024. All rights reserved.