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

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

shadowbat 03-01-2015 19:08 2451427

создание txt файлов по маске *_i.ext
 
Здравствуйте!
подскажите как создать пустые txt файлы
пользователем задается например i1 = 0, i2 = 2
маска в виде "_i.Extension"
и батник должен создать все недостающие файлы в папке с хвостиком от 0 до 2

shadowbat 04-01-2015 09:49 2451625

блок схема под спойлером:
цветным фоном показаны циклы (в данном случае два)
Скрытый текст

Foreigner 04-01-2015 10:23 2451634

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

@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 04-01-2015 10:46 2451641

спасибо
Цитата:

не должно быть более одного "_" (перед номером)
если есть Fi_1le_0.jpg, то создаются файлы Fi_0.txt Fi_1.txt Fi_2.txt
таким образом решение как бы рабочее, но на практике, когда файлов много и нельзя контролировать их названия, то как добавить в bat файл эту самую дополнительную проверку или работу именно с последним символом в имени файла согласно блок схеме?

в принципе можно не делать проверку на "_символ.расширение", а работать сразу напрямую с последним символом перед расширением.
приняв за правило, что все файлы имеют число на конце
например есть файл File1.jpg - и создать файлы File0.txt и File2.txt

Foreigner 04-01-2015 12:23 2451688

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 04-01-2015 14:55 2451756

не работает если пробел в имени файла
файл Fi le_0.png
создаются Fi le_0.png2.txt и Fi le_0.png3.txt

может быть поможет подобная тема, в которой найдено решение на второй стр . (работает и с пробелами в имени файла и с несколькими "_" например Fi_1le_0.jpg)

shadowbat 11-01-2015 12:26 2454427

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

Foreigner 11-01-2015 14:30 2454487

Я уже если честно потерял ход мыслей на эту тему :unsure:
Попробуйте такой вариант. Будет создавать нулевые файлы по порядку без сортировки по расширениям.
Код:

@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 13-01-2015 09:52 2455283

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


Время: 00:38.

Время: 00:38.
© OSzone.net 2001-