PDA

Показать полную графическую версию : [решено] Bat-ник автоматического создания списка файлов


Stalker_AleX333
08-07-2018, 16:32
Народ, нужен bat\cmd файл с таким алгоритмом:

1. Сканирует папку, вместе с подпапками, из которой запущен, на предмет наличия файлов с расширением .nif

2. Если файлов не найдено - уведомляет и закрывается:
@echo Файлов .nif, в данной папке и подпапках не найдено!
pause
exit

2.1 Если найден хотя бы один - создает новый текстовый файл без расширения с именем test spawn. Внутри которого, записи (каждая с новой строки) вида: player.placeatme *имя .nif файла без расширения*

3. Сохраняет генерируемый файл в ту же папку, откуда был запущен bat-ник.

Iska
08-07-2018, 17:56
У меня другое предложение.
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%~1

if defined sSourceFolder (
if exist "%sSourceFolder%\." (
>nul 2>&1 dir /b /s /a:-d "%sSourceFolder%\*.nif" && (
>"%sSourceFolder%\test spawn" (
for /f "usebackq delims=" %%i in (
`2^>nul dir /b /s /a:-d "%sSourceFolder%\*.nif"`
) do echo player.placeatme %%~dpni
)
) || (
echo Файлов *.nif в каталоге [%sSourceFolder%] и во вложенных в него каталогах не найдено.
exit /b 3
)
) else (
echo Can't find source folder [%sSourceFolder%].
exit /b 2
)
) else (
echo Usage: "%~nx0" ^<Source folder^>
exit /b 1
)

endlocal
exit /b 0

Целевой каталог указывается параметром пакетного файла (также можно просто перетащить папку на пакетный файл в Проводнике).

player.placeatme *имя .nif файла без расширения* »
Если только имя — в чём смысл поиска во вложенных каталогах? В приведённом коде указывается полный путь и имя без расширения.

alpap
08-07-2018, 18:08
Если только имя — в чём смысл поиска во вложенных каталогах? »
и у меня такой вопрос возник, так как иначе вроде и такого достаточно:

@echo off
set "dnif=C:\papka"
set "f=spisok.txt"
set "exp=nif"
set "dbv=player.placeatme"

>"%f%" (for /f "delims=" %%a in ('2^>nul where /r "%dnif%" "*.%exp%"') do @echo %dbv% %%~na)
<"%f%">nul find /v "" || (del "%f%"& echo Файлов .nif, в данной папке и подпапках не найдено!)
pause& exit

Stalker_AleX333
08-07-2018, 18:37
Iska, нет, мне путь до .nif-ов не нужен совершенно. В сгенерированном файле его не должно быть. Что подправить в коде?

player.placeatme 000132aa
player.placeatme 0001367b
player.placeatme 0001367c
и т.д.

Iska
08-07-2018, 18:50
Stalker_AleX333, уберите dp в:
) do echo player.placeatme %%~dpni
Но Вы так и не сказали, в чём тогда смысл поиска во вложенных каталогах? А если там будут одноимённые файлы, что тогда получится?

Stalker_AleX333
08-07-2018, 18:54
Но Вы так и не сказали, в чём тогда смысл поиска во вложенных каталогах? А если там будут одноимённые файлы, что тогда получится? »

В моем случае, точно не будут. Все файлы с данным расширением имеют уникальные имена, получаемые их при генерации в СДК одной известной игрушки. Тут правда, следует уточнить, что речь идет только о персонажах. Прочие элементы, теоретически могут иметь совпадающие имена. Но для них этот код не нужен\бесполезен.

З.Ы. Если уж и упарываться в логику, можно просто добавить игнор файлов, чьи имена уже есть в списке, с выводом предупреждения на экран. (Файл *имя файла*.nif уже есть в списке! Пропуск.)

Iska
08-07-2018, 21:53
З.Ы. Если уж и упарываться в логику, можно просто добавить игнор файлов, чьи имена уже есть в списке, с выводом предупреждения на экран. (Файл *имя файла*.nif уже есть в списке! Пропуск.) »
Не-не-не. Реализовывать unique на пакетных файлах я точно не готов (оно, конечно, можно, но — нет). Либо Юниксовская uniq.exe, портированная на Windows, либо WSH/PowerShell.




© OSzone.net 2001-2012