1

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

例子:

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

1 回答 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
    )
)

您只想复制文件,因此copyxcopy. 该代码将回显该copy命令以测试它是否按您想要的方式工作。如果满意,请删除echo复制前面的并再次运行代码以执行实际复制过程。

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

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

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

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

查看, , , ...command /?的帮助copyforifsetlocal

于 2020-04-24T06:46:47.487 回答