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

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

shadowbat 22-05-2010 10:21 1418659

как удалить 1ю строку и склеить строки 3+4, 6+7, 9+10
 
есть куча папок с русскими буквами в названии и подкаталогами
C:\1\001 + подкаталоги
C:\1\002 + подкаталоги
C:\1\003 + подкаталоги
...

и в корне каждой папки есть один файл с названием 1.ini
C:\1\001\1.ini
C:\1\002\1.ini
C:\1\003\1.ini
...

как запустив BAT из C:\1 удалить у каждого 1.ini строки под номерами 1 и 2,5,8,11,14... (т.е. 1 и 2+3+3+3+3+3+3+...)
1 ->
2 ->
3 -> 3
4 -> 4
5 ->
6 -> 6
...

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

Код:

1. строка 3 + точка + пробел + строка 4
2. строка 6 + точка + пробел + строка 7
3. строка 9 + точка + пробел + строка 10
....
N. строка (N*3) + точка + пробел + строка (N*3+1)

_______________________________________________
а потом запустив второй BAT склеить все 1.ini по порядку
C:\1\001\1.ini + C:\1\002\1.ini + C:\1\003\1.ini +... -> all.ini

читать дальше »
Код:

1. строка 3 + точка + пробел + строка 4      //C:\1\001\1.ini 
2. строка 6 + точка + пробел + строка 7
3. строка 9 + точка + пробел + строка 10
....
N. строка (N*3) + точка + пробел + строка (N*3+1)

1. строка 3 + точка + пробел + строка 4      //C:\1\002\1.ini 
2. строка 6 + точка + пробел + строка 7
3. строка 9 + точка + пробел + строка 10
....
N. строка (N*3) + точка + пробел + строка (N*3+1)

1. строка 3 + точка + пробел + строка 4      //C:\1\003\1.ini 
2. строка 6 + точка + пробел + строка 7
3. строка 9 + точка + пробел + строка 10
....
N. строка (N*3) + точка + пробел + строка (N*3+1)


amel27 22-05-2010 13:42 1418754

shadowbat, типа такого?

Код:

@Echo Off

Set INI=1.ini
Set DST=all.ini

If Exist "%DST%" DEL /F/Q "%DST%"
For /F "Delims=" %%a In ('DIR /S/B/A-D %INI%') Do (
  For /F "Tokens=1* Delims=:" %%i In ('FindStr /ERNC:"$" "%%a"') Do (
    Call :TestNum %%i&& <Nul Set /P $X="%%j. ">>"%DST%"
    If Defined $F <Nul Set /P $X="%%j">>"%DST%"& Echo.>>"%DST%")
  Echo.>>"%DST%")
Exit

:TestNum
 Set /A $N=%~1-(%~1+1)/3*3+1
 If %~1  EQU 1 Set $F=& Exit /B 2
 If %$N% EQU 2 Set $F=T&Exit /B 1
 If %$N% EQU 1 Set $F=& Exit /B 0
Set $F=& Exit /B 2


shadowbat 22-05-2010 14:01 1418760

amel27 :yes: совсем не типа такого, а именно так!!

а как добавить, чтобы при создании строк добавлялся порядковый номер, и с каждого нового 1.ini он начинался с 001

читать дальше »
т.е. сейчас в файле all.ini так:
Код:

строка1
строка2
строка3

строка4
строка5
строка6

а нужно
Код:

001. строка1
002. строка2
003. строка3

001. строка4
002. строка5
003. строка6


amel27 22-05-2010 14:37 1418773

shadowbat, точно, пропустил, тогда попробуй так:
Код:

@Echo Off

Set INI=1.ini
Set DST=all.ini

If Exist "%DST%" DEL /F/Q "%DST%"
For /F "Delims=" %%a In ('DIR /S/B/A-D %INI%') Do (Set $N=1
    For /F "Tokens=1* Delims=:" %%i In ('FindStr /ERNC:"$" "%%a"') Do (
    Call :TestN1 %%i&& <Nul Set /P $X="%%j. ">>"%DST%"
    Call :TestN2 %%i&&(<Nul Set /P $X="%%j">>"%DST%"&Echo.>>"%DST%"))
  Echo.>>"%DST%")
Exit

:TestN1
 Set /A $I=%~1-(%~1+1)/3*3+1
 If %$I% NEQ 1 Exit /B 1
 <Nul Set /P $X="%$N%.">>"%DST%"
Set /A $N+=1& Exit /B 0

:TestN2
 Set /A $I=%~1-(%~1+1)/3*3+1
 If %~1  EQU 1 Exit /B 1
 If %$I% NEQ 2 Exit /B 1
Exit /B 0


shadowbat 22-05-2010 14:46 1418779

отлично делает!
как бы теперь поменять с 1, 2, 3 на 001 002 003 или это нереализуемо?

читать дальше »
попробовал поменять в строчке 1 на 001
Код:

For /F "Delims=" %%a In ('DIR /S/B/A-D %INI%') Do (Set $N=1
Код:

For /F "Delims=" %%a In ('DIR /S/B/A-D %INI%') Do (Set $N=001
в итоге 1я строчка создается "001" а вторая "2" а не "002" =)


читать дальше »
еще поменял
Код:

<Nul Set /P $X="%$N%. ">>"%DST%"
Код:

<Nul Set /P $X="00%$N%. ">>"%DST%"
создается 001 002 003 ... 0010 0011 :)

тут видимо через условие либо функцию нужно реализовывать?
или через 3 функции? для номеров 0-9 10-99 100-999


пока что приспособился: BAT + программа Renamer с прибавлением 0 и 00 перед началом нужных файлов

amel27, благодарю! :bow:

amel27 22-05-2010 16:50 1418828

Цитата:

Цитата shadowbat
в итоге 1я строчка создается "001" а вторая "2" а не "002" »

после арифметических операций ведущие нули обрезаются

Цитата:

Цитата shadowbat
создается 001 002 003 ... 0010 0011 »

почти так, только оставить три последних символа (в процедуре TestN1):
Код:

Set $S=00%$N%
 <Nul Set /P $X="%$S:~-3%.">>"%DST%"


shadowbat 22-05-2010 16:59 1418833

красота! amel27, отличная работа!

итоговое решение:

Код:

@Echo Off

Set INI=1.ini
Set DST=all.ini

If Exist "%DST%" DEL /F/Q "%DST%"
For /F "Delims=" %%a In ('DIR /S/B/A-D %INI%') Do (Set $N=1
    For /F "Tokens=1* Delims=:" %%i In ('FindStr /ERNC:"$" "%%a"') Do (
    Call :TestN1 %%i&& <Nul Set /P $X="%%j. ">>"%DST%"
    Call :TestN2 %%i&&(<Nul Set /P $X="%%j">>"%DST%"&Echo.>>"%DST%"))
  Echo.>>"%DST%")
Exit

:TestN1
 Set /A $I=%~1-(%~1+1)/3*3+1
 If %$I% NEQ 1 Exit /B 1
 Set $S=00%$N%
 <Nul Set /P $X="%$S:~-3%.">>"%DST%"
Set /A $N+=1& Exit /B 0

:TestN2
 Set /A $I=%~1-(%~1+1)/3*3+1
 If %~1  EQU 1 Exit /B 1
 If %$I% NEQ 2 Exit /B 1
Exit /B 0


shadowbat 23-05-2010 21:04 1419511

я уже минут 10 подбираю - не могу справиться :)
как сделать еще одну модификацию батника, чтобы он вставлял порядковый номер между блоками?

т.е. сейчас
Код:

            //all.ini
1
2
3

1
2
3

а как сделать: ?
Код:

1            //all.ini
1
2
3

2
1
2
3

3
1
2
3
...


amel27 24-05-2010 03:46 1419696

shadowbat, не уверен, что правильно понял:
Код:

@Echo Off

Set INI=1.ini
Set DST=all.ini

If Exist "%DST%" DEL /F/Q "%DST%"
For /F "Tokens=1* Delims=[]" %%a In ('DIR /S/B/A-D %INI%^|Find /N /V ""') Do (
    Set $N=1& Echo %%a>>"%DST%"
    For /F "Tokens=1* Delims=:" %%i In ('FindStr /ERNC:"$" "%%b"') Do (
    Call :TestN1 %%i&& <Nul Set /P $X="%%j. ">>"%DST%"
    Call :TestN2 %%i&&(<Nul Set /P $X="%%j">>"%DST%"&Echo.>>"%DST%"))
  Echo.>>"%DST%")
Exit

:TestN1
 Set /A $I=%~1-(%~1+1)/3*3+1
 If %$I% NEQ 1 Exit /B 1
 Set $S=00%$N%
 <Nul Set /P $X="%$S:~-3%.">>"%DST%"
Set /A $N+=1& Exit /B 0

:TestN2
 Set /A $I=%~1-(%~1+1)/3*3+1
 If %~1  EQU 1 Exit /B 1
 If %$I% NEQ 2 Exit /B 1
Exit /B 0


shadowbat 24-05-2010 08:16 1419730

amel27, зато я уверен!! :ok: все правильно понял!


Время: 17:52.

Время: 17:52.
© OSzone.net 2001-