首先,我是一个完全的初学者。我在尝试一个游戏的终极脚本蝙蝠文件解决方案。为了不在细节上烦扰你,让我告诉你我尝试做了什么。
举个例子。
\mods\images
和对象在路径上 \mods\models
.list.txt
TTSmissing
夹子我的问题是这样的。
\mods\images\
, 试探)所以我基本上想要的是: \Tabletop Simulator\Mods\
作为源路径,然后脚本就会查到所有的子文件夹。list.txt
能否修改脚本,使我不需要扩展名,使它只查找名字并复制文件? (例如:列表中的名字必须是这样的: hello123.jpg
. 当它只有 hello123
.)@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
)
)
你只是想复制文件,所以 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
...