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

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

Ответить
Настройки темы
CMD/BAT - [решено] Как удалить последнюю строку в текстовом файле?

Новый участник


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

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


Изменения
Автор: ivanxam
Дата: 20-02-2014
Описание: Дописал
Добрый день, люди добрые помогите, что-то я вообще запутался.
Как удалить последнюю строку в файле? Строку эту я знаю.

Файл 100001.txt
Код: Выделить весь код
20140201.jrn
20140202.jrn
20140203.jrn
20140204.jrn
20140205.jrn
20140206.jrn
20140207.jrn
20140208.jrn
20140209.jrn
20140210.jrn
Или можно выполнить dir без последней строки(файла)

Отправлено: 16:03, 20-02-2014

 

Пользователь


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

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


Цитата Iska:
Скажите, коллега, подпись всегда одна и та же? А если могут быть разные — не попадётся ли как-нибудь однажды в подписи символ 0x0A или 0x0D, сиречь LineFeed, або CarriageReturn? Тройку нулевых символов я там уже вижу. »
Подпись может меняться, эм... не, не встречал я таких символов

Цитата Iska:
Ну, WSH везде есть. »
Есть то она есть, но у нас беда с ИБ, прилетает по шапке и доказать, что это необходимо в работе практически не возможно, не любят они скрипты на пользовательских компах...

Отправлено: 06:18, 17-09-2018 | #21



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

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


Ветеран


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

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


Цитата Anufriev:
не любят они скрипты на пользовательских компах... »
Если они такие умные не любят — пусть принимают скрипты, проверяют, снабжают своей цифровой подписью и возвращают вобрат для использования. А mshta.exe они ещё случайно не запретили пользовать, а?

Отправлено: 06:45, 17-09-2018 | #22


Пользователь


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

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


Цитата Iska:
А mshta.exe они ещё случайно не запретили пользовать, а? »
пока что не добрались))))

Отправлено: 06:52, 17-09-2018 | #23


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Iska:
Ну, WSH везде есть. »
ms-dos, win 3.11, win 95?

-------
scio me nihil scire. Ѫ


Отправлено: 07:53, 17-09-2018 | #24


Ветеран


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

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


YuS_2, я имел в виду — из нонешних ОС.

Отправлено: 10:14, 17-09-2018 | #25


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата Iska:
нонешних ОС. »
дык, нонешние это уже семерка, восьмерка да десятка (там posh везде есть)... а остальные в музей пора передавать, на вечное хранение

-------
scio me nihil scire. Ѫ


Отправлено: 11:09, 17-09-2018 | #26


Ветеран


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

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


YuS_2, смотря где. У меня и Windows NT 4.0 Workstation не так давно были вполне рабочими станциями. Что делать… За неимением гербовой — пишем на простой .

Отправлено: 11:19, 17-09-2018 | #27


Ветеран


Contributor


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

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


Anufriev, с голым CMD Ваша задача вряд ли может быть решена. Если принять, как в вашем примере, что строки разделяются символами 0D 0A (то есть 13 10) и последняя строка этими символами не завершается, в подписи эта парочка не присутствует, то
Вот cmd с привлечением js
Код: Выделить весь код
@set @E=1; /*
@Echo Off
	cls
	
	Set "BoxIn=Z:\Box_In"
	Set "BoxOut=Z:\Box_Out"
	Set "Mask=*.xml"
	
	FOR %%f IN ("%BoxIn%\%Mask%") DO (
		Copy "%%f" "%BoxOut%\" >nul
		Call Cscript //NoLogo /E:jscript "%~dpnx0" "%BoxOut%\%%~nxf"
	)
	pause
GoTo :Eof

*/
var oArg = WScript.Arguments;
var nArg = oArg.Count();

if (nArg != 1) {
	WScript.Echo("Error! Invalid number of arguments!");
	WScript.Quit(1);
}

var FText=oArg(0);

var FSO=WScript.CreateObject("Scripting.FileSystemObject");

var InFile;
try {InFile = FSO.OpenTextFile(FText,1);}
catch (e) {
   if (e !=0 ) {
	WScript.Echo("Error! " + FText + "  " + e.description);
       	WScript.Quit(2);
     }
}
var TextAll = InFile.ReadAll();
InFile.Close();

var Nlast=TextAll.lastIndexOf(String.fromCharCode(13,10));
TextAll=TextAll.substr(0,Nlast);

InFile = FSO.OpenTextFile(FText,2);
InFile.Write(TextAll);
InFile.Close();

WScript.Quit(0);
Пропишите пути к вашим входной и выходной папкам.

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


Последний раз редактировалось megaloman, 17-09-2018 в 12:15.

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

Отправлено: 11:53, 17-09-2018 | #28


Ветеран


Contributor


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

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


Тихий ужас! Я не понимаю как, но это на представленном примере работает
Код: Выделить весь код
@Echo Off
	Set "BoxIn=Z:\Box_In"
	Set "BoxOut=Z:\Box_Out"
	Set "Mask=*.xml"
	
	FOR %%f IN ("%BoxIn%\%Mask%") DO (
		>"%BoxOut%\%%~nxf" (FOR /F "usebackq delims=" %%t IN ("%%f") DO @echo.%%t)
	)
GoTo :Eof
Возможно, из-за какого-то непристойного символа в подписи
Гарантировать, что это будет работать всегда, не берусь.

А так, наверное, более предсказуемо:
Код: Выделить весь код
@Echo Off
	Set "BoxIn=Z:\Box_In"
	Set "BoxOut=Z:\Box_Out"
	Set "Mask=*.xml"
	Set "End=</ESDT_BNK>"
	
	FOR %%f IN ("%BoxIn%\%Mask%") DO Call :Restrict "%%f"
GoTo :Eof

:Restrict
	>"%BoxOut%\%~nx1" (FOR /F "usebackq delims=" %%t IN (%1) DO (@echo.%%t) &If /I "%End%"=="%%t" GoTo :Eof)
GoTo :Eof

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


Последний раз редактировалось megaloman, 17-09-2018 в 13:28.

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

Отправлено: 12:51, 17-09-2018 | #29


Ветеран


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

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


Цитата megaloman:
Возможно, из-за какого-то непристойного символа в подписи »
Из-за тех самых нулевых символов (0x00) в подписи, надо полагать. Стоит их убрать — и подпись остаётся на месте.

Отправлено: 13:26, 17-09-2018 | #30



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удалить пустую строку в файле .txt denntl Скриптовые языки администрирования Windows 2 18-07-2013 11:48
Любой язык - [решено] Как выделить каждую определенною строку в текстовом файле KooDI Скриптовые языки администрирования Windows 6 05-03-2013 21:47
VBS/WSH/JS - [решено] Как изменить конкретную строку в текстовом файле с помощью Vbscript neo21 Скриптовые языки администрирования Windows 8 30-10-2011 15:47
CMD/BAT - [решено] Удалить в текстовом файле по условию AlexVong Скриптовые языки администрирования Windows 1 21-11-2010 11:53
[решено] Как удалить строки в текстовом файле при отсутсвии файла в опрелеленном месте? Pozia AutoIt 23 14-05-2009 21:41




 
Переход