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

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

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

  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仅在文件名也具有扩展名时才起作用。是否可以更改脚本,所以我不需要延期?因此它只会查找名称并复制文件? (例如:atmlsit中的名称必须类似于: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个回答
0
投票
@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"

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

for /r "%src_folder%" %%A in (*.jpg *.obj) do (
    echo %%~nA|findstr /b /e /i /g:list.txt >nul 2>&1 && (
        echo copy /y "%%~A" "%dst_folder%\"
    )
)

您只想复制文件,因此copyxcopy更易于使用。该代码将回显copy命令,以测试它是否按预期工作。如果满意,请删除复印件前面的echo,然后再次运行代码以执行实际的复印过程。

for /r循环将在%src_folder%中递归搜索*.jpg*.obj类型的文件。 echo %%~nA将不带扩展名的文件名传递到findstr,以在list.txt中搜索文件名。如果找到,则使用&&来执行copy命令。

[findstr自变量:

  • /ii非敏感匹配
  • /b /eb字符串定义到字符串的e nd(完全匹配

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

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

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