【发布时间】:2019-12-28 09:07:11
【问题描述】:
晚上好。我喜欢在空闲时间修改游戏,这是一种将单个模组打包到 zip 文件中并通过简单地将所述 zip 放入某个文件夹来加载的游戏。我有数百个这样的 zip 并且希望制作一个批次,每次我使用它时都会为我挑选一个随机的 mod,而不必自己挑选它们,同时将所有未使用的拉链放入我制作的禁用文件夹中将所有不被使用的东西都放在一个地方。每个模组都有一个名称前缀,表示它所属的类别,例如“weapon_shotgun_GiantAngryGun9000.zip”或“character_huck_Clown.zip”
这个批处理脚本的工作原理是首先它会获取当前在 mod 文件夹中具有指定前缀的每个文件,并将它们全部放入禁用的文件夹中。然后它会遍历禁用文件夹中具有所有指定前缀的每个文件,从每个类别中选择一个随机文件,并将它们移动到 mod 文件夹中。目前,我已经让我的批次完成所有解释,除了不是随机选择每个,而是从每个前缀列表中选择按字母顺序排列的最后一个。我相信这是因为用于指定 File 数组中条目索引的 Num var 没有被修改或读取,尽管我尽了最大努力,但我无法让它按我希望的方式工作。
感谢任何建议或解决方案,感谢您的阅读。
setlocal EnableDelayedExpansion
SET modFolder="C:\Game\Mods\"
SET disabledFolder="C:\Game\Mods\Disabled\"
SET itemListIndex=0
::Prefix names
SET Prefix1=Weapon_Shotgun_
set itemList[%itemListIndex%]=%Prefix1%
set /A itemListIndex+=1
SET Prefix2=Character_ThisPerson_
set itemList[%itemListIndex%]=%Prefix2%
set /A itemListIndex+=1
SET Prefix3=Weapon_Rifle_
set itemList[%itemListIndex%]=%Prefix3%
set /A itemListIndex+=1
for /l %%G in (0 1 %itemListIndex%) do (
if not "!itemList[%%G]!" == "" (
set num=0
for %%f in (!itemList[%%G]!*.zip) do (
set /A num+=1
set file[%num%]=%%f
)
set /A pick = !random! * %num% / 32768 + 1
echo Moving "!file[%pick%]!" to the mod folder
move "%disabledFolder%!file[%pick%]!" %modFolder%
)
)
set file[%num%]=%%f 回显为set file[]='[name of file]',而不是预期的set file['(index number)']='[name of file]'
书面回声说Moving !file[]! to the mod folder,而不是预期的Moving (name of file) to the mod folder
pick 变量回显为空白,表示 num 或 random 无效
【问题讨论】:
标签: batch-file random