Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как с помощью BAT файла удалить последнее слово в строке?

smak15 Профи (740), на голосовании 7 месяцев назад
Имеется текстовый файл C:\file.txt, с произвольным количеством строк, в нем периодически появляется текст, примерно такого содержания:
 one.two.three 
four.hree.one
petya.vasya.roma
pyat.shest
ewe.bjvaet.100500.slov
Нужно с помощью bat скрипта, убрать последнее слово в каждой строчке.
Чтобы получилось:
 one.two
four.hree
petya.vasya
pyat
ewe.bjvaet.100500
И записать в C:\file2.txt.
Подскажите варианты как это сделать с помощью cmd файла.
Всем заранее спасибо.
Голосование за лучший ответ
Михаил Авчиников Мастер (1807) 8 месяцев назад
Даже как тебе сказать не знаю ахахаха.

Я с бат очень плохо дружу.
Но гуглить умею.

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

В твоем тексте я думаю стоит цепляться к второй точке ?
Я правильно понял стирать все после второй точки ?

Нет стирать все до первой точки слева и саму точку ?!

типа.так.сяк
потом.косяк
а.бывает.не.сяк.и.косяк

Выход ?
типа.так
потом
а.бывает.не.сяк.и

В след раз кстати спросит chat gpt.
На Python он точно тебе помог бы, если комп твой и питон можно установить.

Вот че выдал chat gpt проверь да сам мне лень.
А вопрос ему так же как и сюда можешь писать понимает вроде.


 @echo off 
setlocal enabledelayedexpansion

set input_file=C:\file.txt
set output_file=C:\file2.txt

type nul > %output_file%

for /f "tokens=*" %%a in (%input_file%) do (
set "line=%%a"
for %%b in (!line!) do set "line=!line:.%%b=!"
echo !line!>> %output_file%
)
smak15Профи (740) 8 месяцев назад
Чат гпт мучал, однако не срабатывает его код.
Михаил Авчиников Мастер (1807) smak15, Если ты до сих пор свой вопрос не решил я решу тебе его завтра ! Просто лень было браться за то что сразу не смогу решить или что не знакомо. Если на bat не решу создам тебе на С++ прогу или на Питоне если захочешь. или на vbs где исходник видно как в бат. Кстати да чтоб я не мучался не мучал тебя вопросами завтра. было бы хорошо если бы ты оставил телеграм свой или подробно тут написал какой там текст на входе, какой должен быть на выходе. Но я видел Алекс Куха тебе ответил код sed и тд тп sed "s/.[[:alnum:]]*$//" C:\file.txt > C:\file2.txt sed программка отдельная скачивается и его код проверяешь. Да возможно ты сделал это все уже. Так на всякий случай пишу тебе.
Татьяна Просветленный (36384) 8 месяцев назад
Откройте текстовый редактор (например, Блокнот) и создайте новый файл с расширением remove_last_word.bat. Скопируйте следующий код в этот файл:
 @echo off 
setlocal EnableDelayedExpansion

> "C:\file2.txt" (
for /f "tokens=1*" %%a in ('findstr /n "^" "C:\file.txt"') do (
set "line=%%b"
for %%c in (!line!) do set "line=%%c"
echo(!line:~0,-4!
)
)
Объяснение работы скрипта
  1. @echo off отключает вывод команд на экран.
  2. setlocal EnableDelayedExpansion включает расширенную подстановку переменных.
  3. > "C:\file2.txt" ( перенаправляет вывод в файл C:\file2.txt.
  4. for /f "tokens=1*" %%a in ('findstr /n "^" "C:\file.txt"') читает строки из файла C:\file.txt и разбивает каждую строку на номер строки (%%a) и содержимое строки (%%b).
  5. set "line=%%b" сохраняет содержимое строки в переменной line.
  6. for %%c in (!line!) do set "line=%%c" удаляет ведущие и завершающие пробелы из строки.
  7. echo(!line:~0,-4! выводит строку без последнего слова, используя подстроку !line:~0,-4!, которая извлекает все символы, кроме последних четырех (предполагая, что последнее слово не длиннее 4 символов).
) закрывает блок команд, перенаправляющий вывод в файл.
smak15Профи (740) 8 месяцев назад
На выходе:
 ~0,-4  
~0,-4
~0,-4
~0,-4
~0,-4
Алекс Куха Высший разум (461728) smak15,
Алекс Куха Высший разум (461728) 8 месяцев назад
 sed  "s/.[[:alnum:]]*$//"  C:\file.txt > C:\file2.txt 
Delete last word in each line
Похожие вопросы