可能的?在 robocopy *destination* 中寻找 *partially known* 文件夹名称 - 拆分为变量 - insert/execute

possible? seek *partially known* folder name - split to variable - insert/execute in robocopy *destination*

我使用 gallery-dl 从 Pixiv.com 下载图片。以下所有内容都是 运行 来自 Windows' .bat 文件。

手动创建一个只有{user[id]}的文件夹。

示例:Pixiv - Temp517

然后我将 gallery-dl.bat(调用 gallery-dl.exe 和相关的 gallery-dl.conf,其他地方)和一些辅助 .jpg 文件复制到该文件夹​​中.

示例:Pixiv-Temp517\gallery-dl.bat

我已经为 5,000 多个用户完成了此操作。

运行 gallery-dl.bat 从为下面配置的文件夹中,传递文件夹名称的变量将下载图片并将 *.sqlite3 文件保存到文件夹 24517。

图库-dl.conf

"directory": ["{user[id]}"],

图库的动作部分-dl.bat(完整列出,如下)。

"C:\Users\AdminS6\gallery-dl\gallery-dl.exe" -d "..\..\." --download-archive "%~dp0GDB.sqlite3" "https://www.pixiv.net/en/users/%FOLDER%/illustrations"

当前.bat文件总数:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
pushd "%~dp0" || exit /B
move /y "..\Folder2.jpg" "..\Folder.jpg"
for %%I in (..) do set "FOLDER=%%~nxI"
for /f "tokens=1 delims= " %%a in ("%FOLDER%") do set tmpFOLDER=%%a

"C:\Users\AdminS6\gallery-dl\gallery-dl.exe" -d "..\..\." --download-archive "%~dp0GDB.sqlite3" "https://www.pixiv.net/en/users/%FOLDER%/illustrations"

del "..\Folder3.jpg"
if not exist "GDB.sqlite3" move /Y "..\Folder4.jpg" "..\Folder.jpg"
if exist "GDB.sqlite3" del "..\Folder4.jpg" && del "..\Folder.jpg"

if exist "..\*.mp4" md "..\Reels" & move /y "..\*.mp4" "..\Reels\"
if exist "..\*.gif" md "..\GIFs" & move /y "..\*.gif" "..\GIFs\"
if exist "..\*.webp" md "..\WEBPs" & move /y "..\*.webp" "..\WEBPs\"

robocopy "..\..\%FOLDER%" "X:Web\gallery-dl\Pixiv - Temp517 -" *.* /e /move

TIMEOUT /T 1
popd
endlocal

我现在打算将 gallery-dl.conf 更改为 {user[id]} - {user[name]}。这将导致 gallery-dl 现在创建的目标文件夹发生变化。原文件夹保持不变。

例如我原来的源文件夹:Pixiv-Temp517

gallery-dl 新输出文件夹示例:Pixiv-Temp517 - ケースパ

图库-dl.conf

"directory": ["{user[id]} - {user[name]}"],

图库-dl.exe

"C:\Users\AdminS6\gallery-dl\gallery-dl.exe" -d "..\..\." --download-archive "%~dp0GDB.sqlite3" "https://www.pixiv.net/en/users/%FOLDER%/illustrations"

不知道资源管理器文件夹命名中如何出现{user[name]},我只能手动创建一个只有{user[id]}的原始源文件夹。 因为方便,我会继续这样做。

上述更改会带来我想克服的问题:

  1. 当运行ning gallery-dl时,Pixiv的图片会被下载到名为{user[id]} - {user[name]}的Explorer文件夹中,而原始手动创建的文件夹仍然包含 gallery-dl 和 *.sqlite3 文件。我需要这些组合。

  2. 当 re-running/updating gallery-dl 与 5,000 多个其他文件夹对比时,我将剩下一个 {user[id]} 的 5,000 个和另一个 {user[id] 的 5,000 个} - {用户[姓名]}。

Robocopy 在解决这些问题方面表现出了最大的潜力。当下面的 .bat 中的 运行、gallery-dl 运行s 和 {user[id]} 文件夹中的所有文件都移动到 {user[id]} - {user[name]} 文件夹中时,将 {user[id]} 文件夹留空,我只是 运行 一个删除所有空文件夹的脚本。这还有一个额外的好处,即 .sqlite3 文件都被移动了。

我的问题:我还没有成功地使用 Robocopy

  1. 明确命名目标文件夹的路径

示例作品:

robocopy "..\..\%FOLDER%" "X:Web\gallery-dl\Pixiv - Temp517 -" *.* /e /move

示例不起作用:

robocopy "..\..\%FOLDER%" "..\..517 -" *.* /e /move

传递第二个变量后看起来更像:

示例不起作用:

robocopy "..\..\%FOLDER%" "..\..\%FOLDERDESTINATION%" *.* /e /move

也不

  1. 我不知道如何从事先不知道的文件夹名称 {user[id]} - {user[name]} 传递变量,但必须在上述根文件夹中搜索。

如果有办法从 .bat 文件到

  1. 声明一个与当前文件夹 {user[id]} 匹配的变量(已在下面完成)。 示例:24517

  1. 然后 gallery-dl 创建新的 {user[id]} - {user[name]} 并完成它的工作,.bat 找到并声明一个匹配“{user[id]} -”的变量。

示例:24517 -ケースパベ

因此,我将始终知道任何变量的前半部分:

{用户[id]} -

或者在这种情况下

24517 -

问题是是否可以根据已知的(示例 24517 -)创建的等同于新文件夹名称的合适的辅助变量来搜索整个新文件夹名称?

  1. 然后能否将此变量传递给 Robocopy 以成功移动所有需要的文件?

示例:

robocopy "..\..\%FOLDER%" "..\..\%FOLDERDESTINATION%" *.* /e /move

那就太棒了!

感谢所有 ideas/assistance。提前致谢!


应用 Stephan 的成功答案后的最终结果

@echo off
setlocal EnableExtensions DisableDelayedExpansion
pushd "%~dp0" || exit /B
move /y "..\Folder2.jpg" "..\Folder.jpg"
for %%I in (..) do set "FOLDER=%%~nxI"
for /f "tokens=1 delims= " %%a in ("%FOLDER%") do set tmpFOLDER=%%a

"C:\Users\AdminS6\gallery-dl\gallery-dl.exe" -d "..\..\." --download-archive "%~dp0GDB.sqlite3" "https://www.pixiv.net/en/users/%FOLDER%/illustrations"

del "..\Folder3.jpg"
if not exist "GDB.sqlite3" move /Y "..\Folder4.jpg" "..\Folder.jpg"
if exist "GDB.sqlite3" del "..\Folder4.jpg" && del "..\Folder.jpg"

if exist "..\*.mp4" md "..\Reels" & move /y "..\*.mp4" "..\Reels\"
if exist "..\*.gif" md "..\GIFs" & move /y "..\*.gif" "..\GIFs\"
if exist "..\*.webp" md "..\WEBPs" & move /y "..\*.webp" "..\WEBPs\"

for /d %%a in ("..\..\%FOLDER% - *") do set "FOLDERDESTINATION=%%a"

rem ECHO %FOLDERDESTINATION%

robocopy "..\..\%FOLDER%" ".\%FOLDERDESTINATION%" *.* /e /move

TIMEOUT /T 1
popd
endlocal

如果我正确理解了你的问题,这应该会有所帮助:

for /d %%a in ("..\..\%folder% - *") do set "folderdestination=%%a"

(假设:每个 %folder% 只有一个用户名 - 否则这将只获得最后一个用户名)