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 папке
|
Цитата:
Цитата idenchik1488@vk
найденный по маске файл »
|
- Приведите маску.
- Что делать, если найденных по приведённой маске файлов окажется более одного?
|
idenchik1488@vk |
14-08-2017 16:00 2758295 |
Просто поиск файлов txt
Цитата:
Цитата Iska
Что делать, если найденных по приведённой маске файлов окажется более одного? »
|
Выполнять данную команду с каждым файлом, у всех файлов разные названия
|
Цитата:
Цитата 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», упакованные в архив.
|
Прочтутся все *.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.
© OSzone.net 2001-