Batch file 批复制&;命名

Batch file 批复制&;命名,batch-file,Batch File,编辑:用“Stephan”编辑更新代码。我测试了一些虚拟文件,似乎一切正常。感谢您抽出时间来修复并工作。我现在可以专注于推进项目,而不是让过时的游戏开发工具发挥作用。这是为了让源引擎SDK能够正确加载具有向后兼容性的游戏模型 “sodacan.dx90.dx80.vtx”应为“sodacan.dx80.vtx” “sodacan.dx90.sw.vtx”应为“sodacan.sw.vtx” 原职: 假定此批处理文件通过复制现有vtx文件来恢复丢失的vtx文件。但是vtx文件需要在扩展名之前附加一

编辑:用“Stephan”编辑更新代码。我测试了一些虚拟文件,似乎一切正常。感谢您抽出时间来修复并工作。我现在可以专注于推进项目,而不是让过时的游戏开发工具发挥作用。这是为了让源引擎SDK能够正确加载具有向后兼容性的游戏模型

“sodacan.dx90.dx80.vtx”应为“sodacan.dx80.vtx”

“sodacan.dx90.sw.vtx”应为“sodacan.sw.vtx”

原职: 假定此批处理文件通过复制现有vtx文件来恢复丢失的vtx文件。但是vtx文件需要在扩展名之前附加一个特殊的前缀,例如“sodacan.dx80.vtx”和“sodacan.sw.vtx”

问题是脚本没有按它应该的方式工作。脚本在包含具有不同名称的VTX文件的文件夹上运行。假设脚本创建单个vtx文件的副本并命名它们。下面的示例显示了您从什么开始以及最终结果

你可以从原文开始,比如

sodacan.dx90.vtx (Original File)
你应该以

sodacan.dx90.vtx (Original File)
sodacan.dx80.vtx (Copy 1)
sodacan.sw.vtx (Copy 2)
但我实际上是从代码中得到的

awning001a.dx90.vtx (Original File)
awning001a.dx90.sw.vtx (Copy 1)
awning001a.dx90.dx80.vtx (Copy 2)
这些文件与关联的MDL文件(如(sodacan.MDL))一起工作,但脚本根本不涉及这些文件

下面是批处理文件中的代码

@ECHO OFF

echo Initiating VTX re-construction...

set /a count=0

for /r %%F in (.) do (
    Pushd %%F

    for %%i in ("*.vtx") do (
        for %%j in ("%%~ni") do (
            echo Fixing "%%~ni.mdl".
            if not exist "%%~nj.dx80%%~xi" copy "%%i" "%%~nj.dx80%%~xi" && set /a count+=1
            if not exist "%%~nj.sw%%~xi" copy "%%i" "%%~nj.sw%%~xi" && set /a count+=1
        )
    )

    popd
)

echo %count% reconstructed VTXes.

pause

将%%i循环的
替换为以下内容:

for %%i in ("*.vtx") do (
  for %%j in ("%%~ni") do (
     echo Fixing "%%~ni.mdl".
     if not exist "%%~nj.dx80%%~xi" copy "%%i" "%%~nj.dx80%%~xi" && set /a count+=1
     if not exist "%%~nj.sw%%~xi" copy "%%i" "%%~nj.sw%%~xi" && set /a count+=1
  )
)
最终用途:

echo %count% reconstructed VTXes.
对代码的更改:

  • 仅处理所需的扩展名,而不是处理所有文件,并将扩展名与
    if
  • 复制前检查目标文件是否存在
  • 如果有副本,仅递增计数器
  • 注意%%j的正确文件名(两个点)和另一个
    (有效地删除了两个“扩展名”)
  • 调整最后一行回波,以包括计数器

(不要忘了在
for/R
循环的末尾使用
popd
——pushd
只有一个有限的堆栈,如果没有
popd
,您可能会遇到该限制,生成错误消息并退出脚本)

您需要在同一嵌套级别使用相应的
popd
。您也不能使用
FOR
命令列出目录内容,因为您重命名或复制的任何新文件都可能被推回要再次列出的目录。不理解为什么检查文件扩展名为
.vtx
,然后说您正在修复扩展名为
.mdl
的文件。您在任何时候都不会处理任何扩展名为
.mdl
的文件。怎么了?代码。。。请在问题描述中更加具体!在你告诉我们之前,我们无法知道你到底想要什么…我更新了我的帖子,以便更好地解释这个问题。我想我错过了.sw。部分我会加上它。我所要做的就是通过复制现有文件并将副本重命名为所需的副本来重建丢失的文件。看起来它修复了大量丢失的dx80和sw文件。就像哇。“10267个重建的VTX。”