Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удалить последнее слово в строке (http://forum.oszone.net/showthread.php?t=267908)

AlekseyB. 11-09-2013 16:57 2216179

Удалить последнее слово в строке
 
Доброго времени суток!
Подскажите пожалуйста как решить такую задачу, никак не могу найти нужной команды.
Есть фаил 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\

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

Foreigner 11-09-2013 18:06 2216228

Цитата:

Цитата 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\..

AlekseyB. 11-09-2013 18:12 2216233

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

Foreigner 11-09-2013 18:20 2216236

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

Код:

@echo off
for /f "tokens=*" %%i in (' findstr ".*\\doc.txt" "c:\temp\t1.txt" ') do echo %%~dpi


AlekseyB. 11-09-2013 18:29 2216245

В самом первом посте же написал - есть фаил 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 фаил

Iska 11-09-2013 18:39 2216254

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

Foreigner 11-09-2013 18:44 2216258

AlekseyB.,
Цитата:

Цитата AlekseyB.
в нем есть строка "c:\folder1\ololo\folder2\doc.txt", как удалить doc.txt ? »

Ну так строка там одна или нет? Ладно, допустим одна:
Код:

set /p a=<c:\temp\t1.txt
for %%i in (%a%) do echo %%~dpi


AlekseyB. 11-09-2013 18:47 2216259

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

Foreigner 11-09-2013 19:28 2216282

Цитата:

Цитата AlekseyB.
Не могу найти что значат dpi в .bat »

Это модификаторы служебных переменных:
Код:

%~d -- диск
%~p -- путь

%~dp -- диск и путь

Код:

for /?
call /?


AlekseyB. 11-09-2013 20:32 2216307

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

Iska 11-09-2013 20:39 2216311

Цитата:

Цитата AlekseyB.
…и что ещё? »

И ничего.

Цитата:

Цитата AlekseyB.
Как диск и путь удаляются последнее слово? »

Никак не удаляют. Из внутренней переменной извлекается только имя раздела и путь.

Цитата:

Цитата AlekseyB.
и что значит "~" ? »

Модификатор, изменяющий поведение внутренней переменной.

читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for %%i in ("*.txt") do (
        echo 1. %%i
        echo 2. %%~i
        echo 3. %%~fi
        echo 4. %%~di
        echo 5. %%~pi
        echo 6. %%~ni
        echo 7. %%~xi
        echo 8. %%~dpi
        echo 9. %%~dpnxi
)

endlocal
exit /b 0

Цитата:

Код:

1. My Text File.txt
2. My Text File.txt
3. E:\Песочница\0320\My Text File.txt
4. E:
5. \Песочница\0320\
6. My Text File
7. .txt
8. E:\Песочница\0320\
9. E:\Песочница\0320\My Text File.txt



AlekseyB. 11-09-2013 21:06 2216322

Цитата:

Цитата Iska
Цитата AlekseyB.:
…и что ещё? »
И ничего. »

%~dpi - а как же i ?
с остальным более менее понял, спасибо!

Iska 12-09-2013 02:46 2216441

Цитата:

Цитата AlekseyB.
%~dpi - а как же i ? »

Это внутренняя переменная «%%i»:
Код:

%%~dpi
а «~», «d» и «p» — её модификаторы.

AlekseyB. 12-09-2013 09:54 2216519

Понял, спасибо! а что значит "a=<" ? (set /p a=<c:\temp\t1.txt)
Ещё вопрос про переменные, чтобы уже до конца разобраться - можно ли переменной присвоить значение внутри текстового файла? Ну чтобы чтение из файла шло в переменную? А потом соответственно с ней (переменной) оперировать?

Iska 12-09-2013 10:20 2216526

Код:

set /p a=<c:\temp\t1.txt
«set» — команда задания переменной окружения «a» некоего значения. «/p» — модификатор данной команды, позволяющий осуществить ввод этого значения с клавиатуры. При его задействовании появляется возможность использовать перенаправление ввода — «<» — из файла. Результатом исполнения приведённой команды будет то, что переменной окружения «a» будет присвоено значение первой строки из файла «c:\temp\t1.txt». Как правило, применяется вместо разбора содержимого файла по «for /f» с последующим присвоением, когда надо считать только одну или несколько первых строк.

Цитата:

Цитата AlekseyB.
Ещё вопрос про переменные, чтобы уже до конца разобраться - можно ли переменной присвоить значение внутри текстового файла? Ну чтобы чтение из файла шло в переменную? А потом соответственно с ней (переменной) оперировать? »

Именно это и делает вышеуказанная команда. Но только одной (первой) строки файла. Допустимо чтение нескольких строк в рамках одной операции перенаправления, например…
читать дальше »

E:\Песочница\0320\0001.txt:
Код:

First
Second
Third
Fourth
Fifth

Пакетный файл:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

<"E:\Песочница\0320\0001.txt" (
        set /p sVar01=
        set /p sVar02=
        set /p sVar03=
)

echo %sVar01%
echo %sVar02%
echo %sVar03%

endlocal
exit /b 0

Результат:
Цитата:

Код:

First
Second
Third



AlekseyB. 12-09-2013 10:28 2216528

Спасибо огромное!


Время: 19:59.

Время: 19:59.
© OSzone.net 2001-