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

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

idenchik1488@vk 14-08-2017 15:34 2758287

Поиск файла по маске и выполнение с ним команды
 
Есть батник с таким кодом
Код:

set list=list.txt
set xml=iplist.xml

for /F  %%i in (%list%) do (
  type before.txt>>%xml%
  <nul set /p strTemp=%%i>>%xml%
  type middle.txt>>%xml%
  <nul set /p strTemp=%%i>>%xml%
  type after.txt>>%xml%
  echo. >> %xml%
)

Но он работает только с определенным файлом и сохраняет в определенный файл
Нужен батник с таким же функционалом, но надо чтобы заместо list.txt был найденный по маске файл и заместо iplist.xml сохранялось в одноименный файл только с расширением .xml
Все txt лежат в 1 папке

Iska 14-08-2017 15:47 2758291

Цитата:

Цитата idenchik1488@vk
найденный по маске файл »

  1. Приведите маску.
  2. Что делать, если найденных по приведённой маске файлов окажется более одного?

idenchik1488@vk 14-08-2017 16:00 2758295

Цитата:

Цитата Iska
Приведите маску. »

Просто поиск файлов txt
Цитата:

Цитата Iska
Что делать, если найденных по приведённой маске файлов окажется более одного? »

Выполнять данную команду с каждым файлом, у всех файлов разные названия

Iska 14-08-2017 16:53 2758305

Цитата:

Цитата idenchik1488@vk
Выполнять данную команду с каждым файлом, »

Ага-ага. И над «before.txt», и над «middle.txt», и над «after.txt» — так получается ;)?
Скрытый текст
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFolder=%~1

if defined sSourceFolder (
        if exist "%sSourceFolder%\." (
                for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "%sSourceFolder%\*.txt" ^| findstr.exe /i /v /b /e /l /c:"before.txt" /c:"middle.txt" /c:"after.txt"`) do (
                        for /f "usebackq delims=" %%j in ("%sSourceFolder%\%%~i") do (
                                >"%sSourceFolder%\%%~ni.xml" (
                                        type "before.txt"
                                        <nul set /p sVar=%%j
                                        type "middle.txt"
                                        <nul set /p sVar=%%j
                                        type "after.txt"
                                        echo.
                                )
                        )
                )
        ) else (
                echo Can't find source folder [%sSourceFolder%].
                exit /b 2
        )
) else (
        echo Usage: %~nx0 ^<Source folder^>
        exit /b 1
)

endlocal
exit /b 0


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

Не проверялось совершенно. Нужна проверка — выкладывайте пару-тройку образцов *.txt, плюс «before.txt», «middle.txt» и «after.txt», упакованные в архив.

megaloman 14-08-2017 19:11 2758324

Прочтутся все *.txt кроме before.txt, middle.txt, after.txt
Код:

@Echo Off

Set "Maska=*.txt"
Set Spisok="before.txt" "middle.txt" "after.txt"

Set "BoxIn=Z:\Box_In"
If Not "%1"=="" (
        Set "BoxIn=%~1"       
)

If Not "%BoxIn%"=="" (
        Pushd "%BoxIn%" || (Echo Folder "%BoxIn%" not found &Pause &GoTo :Eof)
)

FOR %%f IN ("%Maska%") DO Call :ToXml "%%~f" %Spisok%
Popd

GoTo :Eof

:ToXml
        If /I %1==%2 GoTo :Eof
        If /I %1==%3 GoTo :Eof
        If /I %1==%4 GoTo :Eof

>"%~n1.xml" (for /F "usebackq delims=" %%i in (%1) do (
        type %2
          <nul set /p strTemp=%%i
        type %3
        <nul set /p strTemp=%%i
        type %4
          echo.
        )
)
GoTo :Eof

Исходную папку можно прописать явно, но можно задать аргументом пакетного файла (также можно просто перетащить папку на пакетный файл в Проводнике), при этом явное задание папки будет проигнорировано.
Если папка задана Set "BoxIn=" и батник запускается из папки с указанными файлами, то будут обработаны файлы в текущей папке.

Проверялось на выдуманных мной файлах.


Время: 22:21.

Время: 22:21.
© OSzone.net 2001-