Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] как удалить 1ю строку и склеить строки 3+4, 6+7, 9+10

Ответить
Настройки темы
CMD/BAT - [решено] как удалить 1ю строку и склеить строки 3+4, 6+7, 9+10

Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


Изменения
Автор: shadowbat
Дата: 22-05-2010
есть куча папок с русскими буквами в названии и подкаталогами
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)

Отправлено: 10:21, 22-05-2010

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:42, 22-05-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

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

читать дальше »
т.е. сейчас в файле all.ini так:
Код: Выделить весь код
строка1
строка2
строка3

строка4
строка5
строка6
а нужно
Код: Выделить весь код
001. строка1
002. строка2
003. строка3

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

Последний раз редактировалось shadowbat, 22-05-2010 в 14:22.


Отправлено: 14:01, 22-05-2010 | #3


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:37, 22-05-2010 | #4


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


отлично делает!
как бы теперь поменять с 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, благодарю!

Последний раз редактировалось shadowbat, 22-05-2010 в 16:54.


Отправлено: 14:46, 22-05-2010 | #5


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата shadowbat:
в итоге 1я строчка создается "001" а вторая "2" а не "002" »
после арифметических операций ведущие нули обрезаются

Цитата shadowbat:
создается 001 002 003 ... 0010 0011 »
почти так, только оставить три последних символа (в процедуре TestN1):
Код: Выделить весь код
 Set $S=00%$N%
 <Nul Set /P $X="%$S:~-3%.">>"%DST%"
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:50, 22-05-2010 | #6


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


красота! 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

Отправлено: 16:59, 22-05-2010 | #7


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

т.е. сейчас
Код: Выделить весь код
            //all.ini
1
2
3

1
2
3
а как сделать: ?
Код: Выделить весь код
1            //all.ini
1
2
3

2
1
2
3

3
1
2
3
...

Отправлено: 21:04, 23-05-2010 | #8


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


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
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:46, 24-05-2010 | #9


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


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

Отправлено: 08:16, 24-05-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] как удалить 1ю строку и склеить строки 3+4, 6+7, 9+10

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] как в конце строки удалить пробел akrav Скриптовые языки администрирования Windows 11 08-10-2024 00:29
Разное - [решено] Как удалить все профили почты outlook из командной строки? (CMD)(vbs) merdzd Microsoft Office (Word, Excel, Outlook и т.д.) 7 17-12-2015 07:02
FAQ - как удалить адрес из командной строки в Opera10 и IE8 для Windows7 Gleban Сетевые технологии 0 27-02-2010 20:06
[решено] Как удалить строки в текстовом файле при отсутсвии файла в опрелеленном месте? Pozia AutoIt 23 14-05-2009 21:41
Интерфейс - [решено] Как удалить ненужные ссылки из адресной строки Internet Explorer? muslim Microsoft Windows 2000/XP 2 15-01-2008 13:54




 
Переход