CMD/BAT - создание txt файлов по маске *_i.ext

Ответить
Аватара пользователя
shadowbat

CMD/BAT - создание txt файлов по маске *_i.ext

Сообщение shadowbat »

Здравствуйте!

подскажите как создать пустые txt файлы

пользователем задается например i1 = 0, i2 = 2

маска в виде "_i.Extension"

и батник должен создать все недостающие файлы в папке с хвостиком от 0 до 2

Изображение
Аватара пользователя
shadowbat

Re: CMD/BAT - создание txt файлов по маске *_i.ext

Сообщение shadowbat »

блок схема под спойлером:

цветным фоном показаны циклы (в данном случае два)



Скрытый текст

[spoiler]Изображение[/spoiler]
Аватара пользователя
shadowbat

Re: CMD/BAT - создание txt файлов по маске *_i.ext

Сообщение shadowbat »

Приблизительно:



Код:

Код: Выделить всё

@echo off
setlocal
pushd d:\test
set a=0
set z=3
for /f "tokens=*" %%i in ('dir /b /a-d') do call:1 "%%i"
popd
goto:eof
:1
for /f "tokens=1 delims=_" %%i in ("%~n1") do (
	for /l %%j in (%a%,1,%z%) do (
		if not exist "%%i_%%j.*" cd.>"%%i_%%j.txt"
))

В файлах в папке d:\test не должно быть более одного "_" (перед номером). Иначе это потребует дополнительной проверки
Аватара пользователя
shadowbat

Re: CMD/BAT - создание txt файлов по маске *_i.ext

Сообщение shadowbat »

спасибо


Цитата:



не должно быть более одного "_" (перед номером)



если есть Fi_1le_0.jpg, то создаются файлы Fi_0.txt Fi_1.txt Fi_2.txt

таким образом решение как бы рабочее, но на практике, когда файлов много и нельзя контролировать их названия, то как добавить в bat файл эту самую дополнительную проверку или работу именно с последним символом в имени файла согласно блок схеме?



в принципе можно не делать проверку на "_символ.расширение", а работать сразу напрямую с последним символом перед расширением.

приняв за правило, что все файлы имеют число на конце

например есть файл File1.jpg - и создать файлы File0.txt и File2.txt
Аватара пользователя
Foreigner

Re: CMD/BAT - создание txt файлов по маске *_i.ext

Сообщение Foreigner »

shadowbat, Вот такая портянка:
читать дальше »






Код:

Код: Выделить всё

@echo off
setlocal
pushd d:\test
set "a=0"
set "z=3"
for /f "tokens=*" %%i in ('dir /b /a-d') do call:1 "%%i"
popd
goto:eof
:1
set "t="
set "check=0"
set "f=%~n1"
set "f=%f: =?%"
set "f=%f:,=:%"
for %%i in (%f:_=,%) do set /a t+=1
for /f "tokens=%t% delims=_" %%i in ("%~n1") do (
    set "last=%%i"
    if not %%i==0 (
        for /f %%j in ('set /a %%i-1') do set "check=%%j"
))
if not "%check%"=="-1" (call:2 %1) else (call:3 %1)
goto:eof
:2
setlocal enabledelayedexpansion
set "remove=%last%%~x1"
set "name=%~1"
for /l %%i in (%a%,1,%z%) do (
    if not exist "!name:%remove%=!%%i.*" cd.>"!name:%remove%=!%%i.txt"
)
endlocal
goto:eof
:3
if not exist "%~n1_%a%%~x1" ren %1 "%~n1_%a%%~x1"
for /l %%i in (%a%,1,%z%) do (
    if not exist "%~n1_%%i.*" cd.>"%~n1_%%i.txt"
)
Аватара пользователя
shadowbat

Re: CMD/BAT - создание txt файлов по маске *_i.ext

Сообщение shadowbat »

не работает если пробел в имени файла

файл Fi le_0.png

создаются Fi le_0.png2.txt и Fi le_0.png3.txt



может быть поможет подобная
CMD/BAT - [решено] удалить файлы по маске *_i.ext
, в которой найдено решение на второй стр . (работает и с пробелами в имени файла и с несколькими "_" например Fi_1le_0.jpg)
Аватара пользователя
shadowbat

Re: CMD/BAT - создание txt файлов по маске *_i.ext

Сообщение shadowbat »

значит файлы с пробелами в имени никак не будут работать?

так то портянка хорошая, рабочая

Изображение
Аватара пользователя
shadowbat

Re: CMD/BAT - создание txt файлов по маске *_i.ext

Сообщение shadowbat »

Я уже если честно потерял ход мыслей на эту тему Изображение

Попробуйте такой вариант. Будет создавать нулевые файлы по порядку без сортировки по расширениям.



Код:

Код: Выделить всё

@echo off
setlocal
pushd d:\test
set "a=0"
set "z=5"
for /f "tokens=*" %%i in ('dir /b') do call:1 "%%i"
popd
goto:eof
:1
for /f "tokens=*" %%i in ('dir /b "%~n1.*"') do (
	for /l %%j in (%a%,1,%z%) do (
		if not exist "%~n1_%%j.*" cd.>"%~n1_%%j%~x1"
))
Аватара пользователя
shadowbat

Re: CMD/BAT - создание txt файлов по маске *_i.ext

Сообщение shadowbat »

кто-то отметил тему решенной? я не отмечал. код выше (третий) просто создаёт 5 файлов без фильтрации т.е. совсем не то,что нужно. код портянка (второй) работает как надо, но не учитывает пробелов
Ответить

Вернуться в «Скриптовые языки администрирования Windows»