Показать полную графическую версию : [решено] как удалить 1ю строку и склеить строки 3+4, 6+7, 9+10
shadowbat
22-05-2010, 10:21
есть куча папок с русскими буквами в названии и подкаталогами
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)
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
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
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
отлично делает!
как бы теперь поменять с 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:
в итоге 1я строчка создается "001" а вторая "2" а не "002" »после арифметических операций ведущие нули обрезаются
создается 001 002 003 ... 0010 0011 »почти так, только оставить три последних символа (в процедуре TestN1):
Set $S=00%$N%
<Nul Set /P $X="%$S:~-3%.">>"%DST%"
shadowbat
22-05-2010, 16:59
красота! 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
я уже минут 10 подбираю - не могу справиться :)
как сделать еще одну модификацию батника, чтобы он вставлял порядковый номер между блоками?
т.е. сейчас
//all.ini
1
2
3
1
2
3
а как сделать: ?
1 //all.ini
1
2
3
2
1
2
3
3
1
2
3
...
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
amel27, зато я уверен!! :ok: все правильно понял!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.