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

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

Ответить
Настройки темы
CMD/BAT - [решено] рубка строки “c:\example\..\example.zip\..\ example.doc” в “c:\example\.\example.zip

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


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

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


Есть такая переменная = “c:\example\...\example.zip\...\ example.doc” Нужно обрубить строку при первом появлении имени архивного файла, имя которого может быть производным.

Отправлено: 12:50, 14-01-2008

 

Аватара для XCodeR

Ветеран


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

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


akrav, язык какой?

Отправлено: 18:24, 14-01-2008 | #2



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

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


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


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

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


желательно стандартными возможностями пакетных файлов win xp

Отправлено: 22:50, 14-01-2008 | #3


Аватара для hasherfrog

Старый параноик


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

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


Код: Выделить весь код
@if "%1"=="" goto usage
@set filename=%1
@set findpath=
@set ok=
@goto start

:sub3
@if "%findpath%"=="" goto first
@set findpath=%findpath%\%1
@goto next
:first
@set findpath=%1
:next
@echo %1 | find ".zip" >nul
@if "%errorlevel%"=="0" goto fook
@goto :EOF
:fook
@set ok=ok
@goto :EOF

:sub2
@FOR /F %1 %%i in ("%filename%") do @call :sub3 %%i
@goto :EOF

:sub
@if "%ok%"=="ok" @goto :EOF
@set v="eol=; tokens=%1* delims=\"
@call :sub2 %v%
@goto :EOF

:start
@FOR /L %%z IN (1,1,10) DO @call :sub %%z

@echo %findpath%
@goto :EOF

:usage
@echo Usage: stripname.bat filename\...\filename.zip\filename\...
Пример использования:
Код: Выделить весь код
C:\Temp>stripname c:\123123.123123\123.zip\\123.12312.3\123\123\123.doc
c:\123123.123123\123.zip
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:43, 15-01-2008 | #4


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


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

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


Спасибо большое! Все работает замечательно, раньше я использовал call только для вызова процедур, совсем забыв про возможности windows nt. Остался только один вопрос по этой теме. Что означает звездочка(*) в выражении:
Цитата hasherfrog:
@set v="eol=; tokens=%1* delims=\" »

Отправлено: 11:03, 16-01-2008 | #5


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


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

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


ничего не понимаю, но наличие пробелов в исходной строке работают таке как и .zip. Т.е. в случае "c:\program files\expl\test.zip\test.doc" результат будет "c:\program", а не "c:\program files\expl\test.zip"

Отправлено: 15:42, 29-01-2008 | #6


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


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

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


Появилась идея, а что если после .zip/ вставить стоп символ или комбинацию, а потом эту строку разбить в цикле разделителем = стоп символу. Но пока это все что-то не фурычит…

Отправлено: 16:52, 30-01-2008 | #7


Аватара для hasherfrog

Старый параноик


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

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


Используйте такой код:
Код: Выделить весь код
@rem @set filename=c:\qweqweqwe\qweqweqwe\qweqweqwe\qweqwe.zip\fsdfsd\qweqweqw\r.doc
@if "%*"=="" goto usage
@set filename=%*
@set findpath=
@set ok=
@goto start

:sub3
@if "%findpath%"=="" goto first
@set findpath=%findpath%\%*
@goto next
:first
@set findpath=%*
:next
@echo %* | find ".zip" >nul
@if "%errorlevel%"=="0" goto fook
@goto :EOF
:fook
@set ok=ok
@goto :EOF

:sub2
@FOR /F %1 %%i in ("%filename%") do @call :sub3 %%i
@goto :EOF

:sub
@if "%ok%"=="ok" @goto :EOF
@set v="eol=; tokens=%1* delims=\"
@call :sub2 %v%
@goto :EOF

:start
@FOR /L %%z IN (1,1,20) DO @call :sub %%z

@if "%ok%"=="ok" @goto heyho
@echo Pattern ".zip" is not found.
@goto :EOF
:heyho
@echo %findpath%
@goto :EOF

:usage
@echo Usage: stripname.bat filename\...\filename.zip\filename\...
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:13, 31-01-2008 | #8


Googler


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

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


хм, имхо можно короче (если я правильно понял задачу):
Код: Выделить весь код
@Set FilePart=%~1
@Set FileName=%~2

@Set FilePart=%FilePart:!=/%
@Set FileName=%FileName:!=/%

@SetLocal EnableDelayedExpansion
@Set FileTrim=!FileName:*%FilePart%=!
@Set FileLeft=!FileName:%FileTrim%=!

@SetLocal DisableDelayedExpansion
@Echo %FileLeft:/=!%
пример:
Код: Выделить весь код
script.cmd ".zip" "c:\qweqweqwe\qweqweqwe\qweqweqwe\qweqwe.zip\fsdfsd\qweqweqw\r.doc"
P.S. Если в имени отсутствует символ "!" код будет еще в два раза короче.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:59, 02-02-2008 | #9


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


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

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


Уважаемый, hasherfrog! Это действительно работает. Только вот если нужно будет передать программе несколько параметров, как быть?

Отправлено: 21:02, 04-02-2008 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Архиваторы - [решено] [addon] 7-Zip 9.20 Final / 9.22 beta / 9.28 alpha dimadr Наборы обновлений для Windows XP/2003/Windows 7 488 13-06-2012 13:33
[решено] Вирус зашифровал doc,xls,rar,zip,jpeg,jpg,psd gamber Лечение систем от вредоносных программ 3 05-11-2009 16:49
CMD/BAT - [решено] cmd, добавить в zip папку robingut Скриптовые языки администрирования Windows 9 18-05-2009 13:25
[решено] Архивация профиля Thunderbird программой 7-zip 4.65 SeRGi-uS AutoIt 10 18-05-2009 10:51
CMD/BAT - [решено] замена set str2=%str1:.zip/=.zip/!% глючит на пробелах?! akrav Скриптовые языки администрирования Windows 5 12-02-2008 11:54




 
Переход