Пакетное копирование и присвоение имен - PullRequest
0 голосов
/ 08 февраля 2019

РЕДАКТИРОВАТЬ: Обновлен код с "Стефан" редактирования.Я проверил несколько фиктивных файлов, и все, кажется, работает.Спасибо, что нашли время, чтобы исправить это и работать.Теперь я могу сосредоточиться на продвижении проектов вместо того, чтобы заставить работать устаревшие инструменты разработки игр.Это было сделано для Source Engine 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

1 Ответ

0 голосов
/ 12 февраля 2019

Замените ваш for %%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
  • Проверьте, существует ли файл назначения перед копированием
  • , увеличьте только счетчик, если была копия
  • , позаботьтесь о правильных именах файлов (две точки) с другим for %%j (эффективно удаляя два"расширения")
  • , адаптированные последнимиecho строка для включения счетчика

(и не забудьте popd в конце цикла for /R - есть только ограниченный стек для pushd и без popd вы можете столкнуться с этим пределом, сгенерировав сообщение об ошибке и выйдя из сценария)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...