Войти

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


orgia
05-03-2015, 13:02
Всем привет!
Просьба помочь в решении задачки.
Есть код:
setlocal enabledelayedexpansion
SET "ifile=%~1"
SET "tfile=%~d1%~p1%~n1.dcbank"
set "Block_end=0"
if not exist "!ifile!" echo File !ifile! not found&pause&exit /b
IF EXIST "!tfile!" type nul>"!tfile!"

FOR /F "usebackq delims=" %%a IN ("!ifile!") DO (
set "line=%%a"
rem конец блока следующий пропускаем
if !Block_end! equ 1 (
set "Block_end=0"
echo.>>"!tfile!"
) else (
IF /i "!line!"=="-}" (
set "Block_end=1"
<Nul Set /P $V=!line!>>"!tfile!"
) else (
echo !line!>>"!tfile!"
)
)
)

Просьба помочь дополнить. Необходимо в папке, например С:\1 найти файлы с расширение txt и передать имя в мой код. Полсе обработки в папке с:\1\2 должен получиться файл с раширением dcbank.
В данный момент имя вводится вручную
Заранее блгдрю

Georgio
05-03-2015, 21:29
orgia, посмотрел Вашу предыдущую тему (http://forum.oszone.net/thread-253909.html). Вы так и не прислушались к мудрым советам: orgia, научитесь уже пользоваться тэгом [code] (http://forum.oszone.net/misc.php?do=bbcode#code). »; Мне гораздо легче (и интереснее - главный побудительный мотив отвечать на вопросы) получить чёткое описание проблемы и предложить решение. Постигать логику постановки задачи по приведенному коду долго, и это не по мне ».

orgia
06-03-2015, 09:12
Спасибо за справедливую критику :)

setlocal enabledelayedexpansion
SET "ifile=%~1"
SET "tfile=%~d1%~p1%~n1.dcbank"
set "Block_end=0"
if not exist "!ifile!" echo File !ifile! not found&pause&exit /b
IF EXIST "!tfile!" type nul>"!tfile!"

FOR /F "usebackq delims=" %%a IN ("!ifile!") DO (
set "line=%%a"
rem конец блока следующий пропускаем
if !Block_end! equ 1 (
set "Block_end=0"
echo.>>"!tfile!"
) else (
IF /i "!line!"=="-}" (
set "Block_end=1"
<Nul Set /P $V=!line!>>"!tfile!"
) else (
echo !line!>>"!tfile!"
)
)
)

а по сути:
В данном батнике я разбираю входящее сообщение, который разделен на блоки. между блоками символ $.
например:
{jdkjdkj
lsdfnlsd
sdlksdlk
sdnjdsljk
-}
$
{efso
sfdjnfllkfd
ljkfdij
-}

необходимо строку со знаком $ удалить.

батник удаляет, но переменную в виде файла подаю вручную.

Хотелось бы.
Чтобы батник искал в любой папке сообщения с расширением .txt
открывал его анализировал, удалял $ и переносил полученный результат в файл с тем же именем, но расширением например .out

Как то так.

Georgio
06-03-2015, 16:11
Спасибо за справедливую критику :) »



orgia, спасибо за понимание. Теперь могу Вам и короткий код предложить:


@echo off

set "indir=%~1"
set "inext=.txt"
set "outdir=%indir%\out"
set "outext=.dcbank"

(
for /f "delims=" %%i in ('2^>nul findstr/m \-} "%indir%\*%inext%"') do (
2>nul md "%outdir%"
findstr/v ^^\$ "%%i">"%outdir%\%%~ni%outext%"
)
)|| (echo The necessary files are not found.& pause>nul)

exit/b


.


orgia, перетаскивайте любую папку с обрабатываемыми файлами с расширением ".txt" на пакетный файл, и, если нужные файлы будут найдены, в этой папке будет создан каталог "out", в котором и будут находиться полученные файлы с расширением ".dcbank".

orgia
10-03-2015, 06:25
Спасибо за предложенный вариант. Батник не отрабатывает. Запускаю батник, кидаю в окно папку с файлом, окно закрывается. Папка out не создается и никаких следов работы батника не обнаруживается. ОС win7 64бит.




© OSzone.net 2001-2012