Имя пользователя:
Пароль:
 | Правила  

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

Ответить
Настройки темы
CMD/BAT - [решено] Помогите удалить из txt ненужные строки

Аватара для root221

Старожил


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

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


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

Помогите удалить всё до первого проблела


Код: Выделить весь код
qwerty - tgbvfrw
asdfg - hjkl
zxcvbnm - aaaa
asdfghjjj - ssssssss
rtyuiopp - zcdsc
ghjklhgg - saffdsfsd
qaswefg - htyytjytj
В общем надо что бы после запуска вашего скрипта, в текстовом файле оставалось только.

Код: Выделить весь код
qwerty
asdfg
zxcvbnm
asdfghjjj
rtyuiopp
ghjklhgg
qaswefg

Спасибо за ранее!!

Отправлено: 15:09, 12-08-2013

 

Ветеран


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

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


Цитата root221:
удалить всё до первого проблела »
Может быть, после первого пробела, включительно?

читать дальше »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sFile=%~1

if defined sFile (
	if exist "%sFile%" (
		call :GetTemporaryName
		
		>"!TemporaryName!" (
			for /f "usebackq delims= " %%i in ("%sFile%") do (
				echo.%%i
			)
		)
		
		>nul copy /y "%sFile%" "%~dpn1.bak"
		>nul copy /y "!TemporaryName!" "%sFile%"
		del /f /q "!TemporaryName!"
	) else (
		echo Can't find source file [%sFile%].
	)
) else (
	echo Usage: %~nx0 ^<Source file^>
)

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
	setlocal enableextensions enabledelayedexpansion

:NextName
	set sTempName=%temp%\temp%random%.tmp

	if exist "%sTempName%" goto :NextName

	set sProcName=%~0

	endlocal & set %sProcName:~4%=%sTempName%
	exit /b 0
rem ==========================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:48, 12-08-2013 | #2



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

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


Аватара для root221

Старожил


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

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


Цитата Iska:
Может быть, после первого пробела, включительно? »
да) вы правы я просто торопился.

Iska, Спасибо конечно за скриптик, не ожидал что будет такой большой. Может вы мой подправите что бы он работал так же как он работает, вот только что-бы скриптик поумнее получился и писал не в лог log.txt а в xxx.txt надо что бы удалял не нужное и всё

а если быть точнее то просто читаем xxx.txt у убираем в нем не нужное.

А в моём примере я просто из xxx.txt в лог нужные мне строки переношу.

Код: Выделить весь код
@echo off
echo 0>log.txt
for /f "tokens=1,2 usebackq" %%a in ("xxx.txt") do (
echo %%a
)>>log.txt
фигню наверно я сделал но оно работает

Последний раз редактировалось root221, 12-08-2013 в 20:43.


Отправлено: 20:38, 12-08-2013 | #3


Ветеран


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

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


Цитата root221:
не ожидал что будет такой большой »
Вы ведь написали:
Цитата root221:
в текстовом файле оставалось только »
т.е. — в том же файле.

Если усечённые строки сохранять в новый файл — надобность в промежуточном временном файде отпадает (не проверялось):
читать дальше »
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=%~1
set sDestFile=log.txt

if defined sSourceFile (
	if exist "%sSourceFile%" (
		>"%sDestFile%" (
			for /f "usebackq delims= " %%i in ("%sSourceFile%") do (
				echo.%%i
			)
		)
	) else (
		echo Can't find source file [%sSourceFile%].
	)
) else (
	echo Usage: %~nx0 ^<Source file^>
)

endlocal
exit /b 0


Цитата root221:
Код: Выделить весь код
echo 0>log.txt
»
Не делайте так. Лучше проверьте, существует ли файл, и если существует — удалите.
Цитата root221:
Код: Выделить весь код
for /f "tokens=1,2
»
Зачем Вам второй токен? Вы его не пользуете.

Отправлено: 04:53, 13-08-2013 | #4


Аватара для root221

Старожил


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

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


Смотрите как работает мой скрипт,

1, чистит файл log.txt

2, ищет в файле xxx.txt всё что начинается с первой строки

3, и выводит всё что нашел в консоль

4, потом просто заполняет опять log.txt который ранее был очищен.


А вот что надо мне.

1, ищет в файле file1.txt всё до первого пробела

2, и выводит всё что нашел в консоль

3, потом чистит этот файл file1.txt

4, и в него же записывает то что вывел в консоль

Код: Выделить весь код
@echo off
for /f "usebackq delims= " %%a in ("file1.txt") do (
echo %%a>file1.txt
)
Просто если так сделать то он записывает только последнюю строчку из наиденного

Отправлено: 17:47, 13-08-2013 | #5


Аватара для root221

Старожил


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

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


в общем добился я того что мне надо, пока-что вот так

Код: Выделить весь код
@echo off
echo 0>file2.txt
for /f "usebackq delims= " %%a in ("file1.txt") do (
echo.%%a)>>file2.txt
а хотелось бы что-бы работало вот так

Код: Выделить весь код
for /f "usebackq delims= " %%a in ("file1.txt") do (
echo.%%a)>file1.txt

Отправлено: 18:27, 13-08-2013 | #6


Ветеран


Contributor


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

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


Не получится как хочется, разве что как-то исхитриться исх файл в массив записать. Работаем через промежуточный файл
Код: Выделить весь код
@Echo Off

Set "FileName=txt.txt"

del "~%FileName%.tmp" 2>Nul
FOR /F "tokens=1  usebackq delims= " %%i in ("%FileName%") do @echo %%i>>"~%FileName%.tmp"
Move /Y "~%FileName%.tmp" "%FileName%"

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:16, 13-08-2013 | #7


Ветеран


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

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


Цитата root221:
а хотелось бы что-бы работало вот так »
Не выйдет. Ибо исходный файл будет очищен раньше, чем прочтён. Только через промежуточный временный файл.

Отправлено: 19:20, 13-08-2013 | #8


Аватара для root221

Старожил


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

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


megaloman, Спасибо вы решили мою проблему.

Отправлено: 22:19, 13-08-2013 | #9


Ветеран


Contributor


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

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


Исключительно из упрямства предлагаю корявое решение без промежуточного файла с имитацией массива
Код: Выделить весь код
@Echo Off

Set "FileName=txt.txt"

SetLocal EnableExtensions EnableDelayedExpansion

Set /A N=0
FOR /F "tokens=1 usebackq delims= " %%i in ("%FileName%") do (
	Set /A N=!N!+1
	Set "String.!N!=%%i"
)
Del "%FileName%" 
FOR /L %%j IN (1,1,%N%) DO Echo !String.%%j!>>"%FileName%"
Корявое, потому что:
1. Работает медленно
2. Не знаю, насколько длинным может быть выходной файл, то есть не знаю границ применимости по числу и длине строк
3. И намного длиннее чем решение Diskretor, приведённое ниже :

Респект amel27 за идею

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 14-08-2013 в 01:02.


Отправлено: 23:59, 13-08-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Удалить лишние строки из txt aos Скриптовые языки администрирования Windows 25 10-07-2012 17:08
CMD/BAT - вытащить из 3-x txt файлов строки в 4-й txt и отправить его в шару на сервер campbell Скриптовые языки администрирования Windows 1 10-11-2011 09:59
Можно ли убрать ненужные драйвера из TXT-режима? Wanderer-1000 Автоматическая установка Windows 2000/XP/2003 3 02-05-2011 19:06
VBS/WSH/JS - [решено] Нужно быстро (!) удалить пустые строки во всех txt-файлах из одной директории andreton Скриптовые языки администрирования Windows 10 08-06-2010 03:39
Интерфейс - [решено] Как удалить ненужные ссылки из адресной строки Internet Explorer? muslim Microsoft Windows 2000/XP 2 15-01-2008 13:54




 
Переход