今天我正在尝试做一个脚本,它会自动将一些文件移动到我的游戏文件夹(使用 xcopy)。这是一个简单的批处理,但我的问题是,几乎每个月,我需要移动文件的文件夹都在变化。而且我真的很懒,所以我有一种方法可以保存实际的目标文件夹(路径),例如使用“dir”并将其保存在变量中以用作 xcopy 的目标。
在这里链接-->架构树
重要的是,目标文件夹中只有 1 个文件夹 EDIT:existing(可能更容易?)。
这是我的想法,但它不起作用,可能是因为信息太多。
源 -> D:\MyMods
全名:D:\config\Games\WoWS\Mods\6) Skins\All_Skins(Modified)\
目的地 -> *L:\games\mods\0.6.15.0*
全名:L:\Games\World_of_Warships\res_mods
set version = dir "L:\Games\World_of_Warships\res_mods"
中间结果 -> 版本 = 0.6.15.0
xcopy "D:\source\" "L:\Games\World_of_Warships\res_mods\%version%\" /E /Y
最终结果 -> L:\Games\World_of_Warships\res_mods\0.6.15.0\FILES_COPIED
PS:我几乎失去了对批处理的所有概念,但是通过很少的研究,我通常会找到我想要做的事情,但是在这里,我找不到:|
谢谢大家
编辑:最终创建的“dir /AD /B”给了我正确的名称文件夹,但现在我需要保存它,或者让它在我的 xcopy 中可用
试过:(不工作)
set version=NotSet
dir /AD /B "L:\Games\World_of_Warships\res_mods" > %version%
最后,经过多次尝试,我得到了一些东西,但它不起作用,原因我看不到:
dir /AD /B "L:\Games\World_of_Warships\res_mods" > version.txt
set /P version=<version.txt
set "destination=L:\Games\World_of_Warships\res_mods\%version%\"
set "source=D:\config\Games\WoWS\Mods\6) Skins\All_Skins(Modified)\"
xcopy %source% %destination% /E /Y
echo %destination%
echo %source%
结果如下:
参数数量无效 --->为什么?
L:\Games\World_of_Warships\res_mods\0.6.15.0\ --->正确
D:\config\Games\WoWS\Mods\6) Skins\All_Skins(Modified)\ --->正确
EDIT2:我缩短了文件夹的名称以便更容易“计划”,然后我只需要在路径前后使用一些“,然后,它应该可以工作。但显然,它带来的麻烦比任何事情都多。抱歉.
谢谢你的-1,但最好说明你为什么这样做是为了不犯同样的错误;)
根据我的理解,您收到此消息的原因是您的source
变量值不正确且不必要的斜杠。
这不应该工作:
Set "destination=L:\Games\World_of_Warships\res_mods\%version%\"
Set "source=D:\config\Games\WoWS\Mods\6) Skins\All_Skins(Modified)\"
XCopy "%source%" "%destination%" /E /Y
这应该可以工作(可选):
Set "destination=L:\Games\World_of_Warships\res_mods\%version%\"
Set "source=D:\config\Games\WoWS\Mods\6) Skins\All_Skins(Modified)"
XCopy "%source%" "%destination%" /E /Y
这应该有效(推荐):
Set "destination=L:\Games\World_of_Warships\res_mods\%version%"
Set "source=D:\config\Games\WoWS\Mods\6) Skins\All_Skins(Modified)"
XCopy "%source%" "%destination%" /E /Y
将它们放在一起,您的脚本将如下所示:
Dir /B/AD-S-L "L:\Games\World_of_Warships\res_mods">"version.txt"
Set /P "version="<"version.txt"
Set "destination=L:\Games\World_of_Warships\res_mods\%version%"
Set "source=D:\config\Games\WoWS\Mods\6) Skins\All_Skins(Modified)"
XCopy "%source%" "%destination%" /E /Y
Echo=%destination%
Echo=%source%
编辑
要绕过文本文件的使用,您可以将上面的前三行替换为:
For /D %%A In ("L:\Games\World_of_Warships\res_mods\*") Do Set "destination=%%~fA"
请记住,当您所说的只有一个时,这将充分检索完整路径目录名称
如果您想,为了安全起见,确保您使用的是最近创建的目录名称,那么您可以使用它:
CD /D "L:\Games\World_of_Warships\res_mods" 2>Nul || Exit /B
For /F "Delims=" %%A In ('Dir /B/AD-S-L/OD/TC') Do Set "destination=%%~fA"
编辑 2
根据最新的评论请求,要么:
Set "destination="
For /D %%A In ("L:\Games\World_of_Warships\res_mods\*"
) Do If Not Defined destination Set "destination=%%~fA"
或者Dir
与 ordering 一起使用以确保您获得正确的第一个。(/ON
按名称排序,按名称/O-N
反向排序,或/OD|/O-D
按日期与/TC|/TW
创建或写入类似):
CD /D "L:\Games\World_of_Warships\res_mods" 2>Nul || Exit /B
Set "destination="
For /F "Delims=" %%A In ('Dir /B/AD-S-L/ON'
) Do If Not Defined destination Set "destination=%%~fA"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句