Войти

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


idenchik1488@vk
14-08-2017, 15:34
Есть батник с таким кодом
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
найденный по маске файл »

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

idenchik1488@vk
14-08-2017, 16:00
Приведите маску. »
Просто поиск файлов txt
Что делать, если найденных по приведённой маске файлов окажется более одного? »
Выполнять данную команду с каждым файлом, у всех файлов разные названия

Iska
14-08-2017, 16:53
Выполнять данную команду с каждым файлом, »
Ага-ага. И над «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
@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=" и батник запускается из папки с указанными файлами, то будут обработаны файлы в текущей папке.

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




© OSzone.net 2001-2012