问题介绍: 死岛游戏崩溃一旦保存文件超过一定的文件大小。文件是档案,但扩展名为.sav而不是.zip。 我想创建一个循环遍历* .sav文件的脚本,将它们复制到具有相同文件名的另一个位置,但是作为* .zip,然后提取它们,检查提取的文件大小,并在文件大小超过限制时提醒我。
到目前为止,我得到了这个:
@ECHO OFF
setlocal enableextensions enabledelayedexpansion
FOR %%i IN ("D:\Games\Dead Island\out\save\"*.sav) DO (
set str=
set str=!str!%%i
set str=!str:.sav=.zip!
echo !str!
copy %%i !str!
)
PAUSE
由于某种原因,bat文件在FOR循环中为变量赋值时遇到问题,所以我找到了使用delayedexpansion的解决方案。
但目前我最大的问题是它不会将save_1.sav复制到名为save_1.zip的其他位置!
一旦我越过这个,我将深入研究7zip解包和文件大小验证(以及所需的所有其他东西),但这只是令人沮丧:) 也许我应该在python中这样做...
答案 0 :(得分:0)
如果你想更改某些内容的文件扩展名,你可以使用%%~n<variable>
来获取词干,就像这样(取自我的一个批处理文件):
FOR %%f IN (*.ebr) DO (
hcsg -c %%f %%~nf.cg1
hbsp -c %%~nf.cg1 nohints %%~nf.ct1
hportal -c %%~nf.ct1 %%~nf.cp
hflood -c %%~nf.ct1 %%~nf.cp %%~nf.cg2
hbsp -c %%~nf.cg2 nohints %%~nf.ct2
)
这可能有用:
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true
在你的情况下,我猜你可以这样做:
FOR %%f IN (*.sav) DO (
copy %%f %%~nf.zip
)
(刚刚在命令行测试了这个 - 如果你想尝试它,你可以使用%而不是%% - 并且它可以工作。)
答案 1 :(得分:0)
似乎没有人想过这个gem,但是这里是如何在FOR循环中使用%variable%而不是%%变量,这样你就可以操作它。
将其放入D:\ superrename.bat:
@echo off
set CURRFILE=%1
set CURRFILE=%CURRFILE:~6%
set CURRFILE=FREN%CURRFILE%
if "%1" == "" (
for %%F in (*) do call d:\superrename.bat %%F
) else (
echo we found %1 which will become %CURRFILE%
)
这样做可以让你在FOR命令中使用常规变量操作(没有延迟扩展)。我打算用重命名删除文件名的前几个字符(在本例中为六个字符)。必须设置在外部,否则如果在echo之前,echo的输出将滞后一次执行FOR。
&#34;我们发现xntimer.ini将成为FRENr.ini&#34;
限制: 请注意,如果%% F包含空格,则会将多个参数传递给批处理文件(%2,%3等等)。如果尝试引用,则CALL将无法正常工作,此时不会预期[第二个字]。
解决这个问题的方法是在上面的两个地方指定%*而不是%1。
第二个限制:使用FOR命令。它会看到一些重命名的文件并再次执行!最好将副本用于另一个目录等。 (问题可能与https://superuser.com/questions/475874中的错误有关...在我的情况下,我有大约8个随机项目来修复超过100个文件。)
快乐的编码!