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

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

Ответить
Настройки темы
CMD/BAT - Удалить последнее слово в строке

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


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

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


Изменения
Автор: AlekseyB.
Дата: 11-09-2013
Доброго времени суток!
Подскажите пожалуйста как решить такую задачу, никак не могу найти нужной команды.
Есть фаил t1.txt, в нем есть строка "c:\folder1\ololo\folder2\doc.txt", как удалить doc.txt ? Название этих файлов doc.txt всегда будут разные, но это всегда будут тхт файлы, нужно чтобы остался только путь до папки т.е. c:\folder1\ololo\folder2\
Пробовал делать через найти и заменить, получилось поменять путь, на который мне надо, но убрать последнее слово так и не придумал как.
Пробовал через findstr, команда выглядит так:
findstr /s /m "parametr" C:\folder1*.*
Но она возвращает полный адрес, т.е. c:\folder1\folder2\folder3\doc.txt, а нужно c:\folder1\folder2\folder3\

2ой вариант искал возможность это копировать на каталог выше фаил. Например он лежит c:\folder1\folder2\folder3\doc.txt, а скопировать в c:\folder1\folder2\doc.txt, но опять же фаил находит findstr по параметрам, но конечные папки неизвестны. Пробовал делать xcopy "..\" но в таком виде он копирует в корень диска C.

Также пробовал делать циклом, а именно:

@echo off
setlocal enabledelayedexpansion
FOR /F "delims=arh" %%i in (c:\temp1\t1.txt) do (
echo %%i>c:\temp1\pars.txt
)
Но проблема в том, что он обрезает строку, когда встретит буквы a,r или h, а надо чтобы он читал до того момента, когда встретит именно "arh". В строке такое слово только 1, например C:\test1\test-r\test-a\arh\doc.txt
В таком виде он обрезает до C:\test1\test- , а нужно чтобы до C:\test1\test-r\test-a\

Если есть какие то идеи как реализовать это подскажите пожалуйста. Заранее спасибо.

Отправлено: 16:57, 11-09-2013

 

Ветеран


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

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


Цитата AlekseyB.:
нужно чтобы остался только путь до папки т.е. c:\folder1\ololo\folder2\ »
Код: Выделить весь код
for %%i in (c:\folder1\ololo\folder2\doc.txt) do echo %%~dpi
Цитата AlekseyB.:
искал возможность это копировать на каталог выше фаил »
Код: Выделить весь код
pushd c:\folder1\ololo\folder2
copy doc.txt ..\
popd
Код: Выделить весь код
copy c:\folder1\folder2\folder3\doc.txt c:\folder1\folder2\folder3\..
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:06, 11-09-2013 | #2



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

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


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


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

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


не то. в данном случае он обрезает путь до файла, который c:\temp\t1.txt. В самом t1.txt есть путь к нужному файлу, т.е. строка c:\folder1\ololo\folder2\doc.txt , и надо обрезать как раз её, т.е. содержимое t1.txt
По копированию - варианты не подходят, тк адрес файла неизвестен, он возвращается findstr.

Отправлено: 18:12, 11-09-2013 | #3


Ветеран


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

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


AlekseyB., Т.е из файла c:\temp\t1.txt взять строку и обрезать? Строка там одна или несколько, по какому принципу искать нужную? Чем конкретней вопрос, тем правильней ответ.

Код: Выделить весь код
@echo off
for /f "tokens=*" %%i in (' findstr ".*\\doc.txt" "c:\temp\t1.txt" ') do echo %%~dpi
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:20, 11-09-2013 | #4


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


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

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


В самом первом посте же написал - есть фаил t1.txt, в нем есть строка "c:\folder1\ololo\folder2\doc.txt", как удалить doc.txt ?
Строка только одна. Она в t1.txt попадает с помощью
findstr /s /m "!sm!" C:\папка для поиска\*.* > C:\temp1\t1.txt

!sm! - задаваемый параметр. Какая это будет строка неизвестно, но точно известно что это будет адрес файла в виде
c:\folder1\folder2\folder3\doc.txt
Вот этот самый файлик doc.txt нужно скопировать на каталог выше. Либо в этой строке удалить doc.txt и сделать t2.txt в виде c:\folder1\folder2\folder3\ - тут уже можно просто копированием. Либо делать парсер, что я тоже пытался но безрезультатно, парсить до слово arh. Делаю так
FOR /F "delims=arh" %%i in (c:\temp1\t1.txt) do (
echo %%i>c:\temp1\pars.txt
)
Но не получается именно arh, он ищет либо до a, либо до r, либо до h

ps - doc.txt тоже переменная. фаил может называеться ololo.txt palmeb.txt и тд и тп, но это всегда txt фаил

Отправлено: 18:29, 11-09-2013 | #5


Ветеран


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

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


AlekseyB., то, что Вы пытаетесь сделать — излишне. Приведите полное задание.

Отправлено: 18:39, 11-09-2013 | #6


Ветеран


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

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


AlekseyB.,
Цитата AlekseyB.:
в нем есть строка "c:\folder1\ololo\folder2\doc.txt", как удалить doc.txt ? »
Ну так строка там одна или нет? Ладно, допустим одна:
Код: Выделить весь код
set /p a=<c:\temp\t1.txt
for %%i in (%a%) do echo %%~dpi

Отправлено: 18:44, 11-09-2013 | #7


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


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

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


полное - найти фаил по параметрам. фаил нужно найти не по названию, а по содержанию внутри файла (все файлы текстовые документы), потом скопировать этот фаил на каталог выше, потом скопировать путь к этому в текстовый док, потом в этом путе найти слово qwe и заменить его на asd и добавить новый путь к старому через символ #, потом ещё нужно в этом текстовом доке дописать константы, но это мелочи.
Сейчас у меня только загвоздка с копированием.
строка одна всегда
2Foreigner
В таком виде работает, потестирую с разными именами файлов и путей. Огромное спасибо!
Не могли бы объяснить код? Не могу найти что значат dpi в .bat

Отправлено: 18:47, 11-09-2013 | #8


Ветеран


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

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


Цитата AlekseyB.:
Не могу найти что значат dpi в .bat »
Это модификаторы служебных переменных:
Код: Выделить весь код
%~d -- диск
%~p -- путь

%~dp -- диск и путь
Код: Выделить весь код
for /?
call /?

Отправлено: 19:28, 11-09-2013 | #9


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


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

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


%~dpi -диск путь и что ещё? Как диск и путь удаляют последнее слово? и что значит "~" ?

Последний раз редактировалось AlekseyB., 11-09-2013 в 20:52.


Отправлено: 20:32, 11-09-2013 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] как удалить определенный символ в строке из батника RedX Скриптовые языки администрирования Windows 1 18-01-2012 10:36
CMD/BAT - [решено] Удалить все знаки в строке после ; hxygen Скриптовые языки администрирования Windows 11 16-11-2010 02:34
Все знают про обьеденение строк ('слово'&'еще слово'), а есть ли способ исключениеня? tweakos AutoIt 3 15-07-2009 09:52
Звук - Колонки - последнее решение Analog Прочее железо 6 03-01-2009 08:03
последнее сообщение Dimas_83 О сайте и форуме 2 04-07-2006 10:57




 
Переход