Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Bat-ник автоматического создания списка файлов (http://forum.oszone.net/showthread.php?t=335636)

Stalker_AleX333 08-07-2018 16:32 2821029

Bat-ник автоматического создания списка файлов
 
Народ, нужен bat\cmd файл с таким алгоритмом:

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

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


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

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

Iska 08-07-2018 17:56 2821036

У меня другое предложение.
Код:

@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

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

Цитата:

Цитата Stalker_AleX333
player.placeatme *имя .nif файла без расширения* »

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

alpap 08-07-2018 18:08 2821039

Цитата:

Цитата Iska
Если только имя — в чём смысл поиска во вложенных каталогах? »

и у меня такой вопрос возник, так как иначе вроде и такого достаточно:
Код:

@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 2821045

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

Вид должен быть таким, как пример
player.placeatme 000132aa
player.placeatme 0001367b
player.placeatme 0001367c
и т.д.

Iska 08-07-2018 18:50 2821048

Stalker_AleX333, уберите dp в:
Код:

                                ) do echo player.placeatme %%~dpni
Но Вы так и не сказали, в чём тогда смысл поиска во вложенных каталогах? А если там будут одноимённые файлы, что тогда получится?

Stalker_AleX333 08-07-2018 18:54 2821049

Цитата:

Цитата Iska
Но Вы так и не сказали, в чём тогда смысл поиска во вложенных каталогах? А если там будут одноимённые файлы, что тогда получится? »

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

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

Iska 08-07-2018 21:53 2821075

Цитата:

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

Не-не-не. Реализовывать unique на пакетных файлах я точно не готов (оно, конечно, можно, но — нет). Либо Юниксовская uniq.exe, портированная на Windows, либо WSH/PowerShell.


Время: 23:08.

Время: 23:08.
© OSzone.net 2001-