Показать полную графическую версию : Скопировать путь к открытому файлу и прописать его в конце текстового файла.
VirusFUN
07-09-2012, 07:46
Не знал как еще сформулировать заголовок, но задача такая:
Нужно скопировать путь к папке, где лежит указанный файл. (Например, заходим на флешку в папку INSTALL, а в этой папке выделяем файл и нажимаем ХотКей, что запустит скрипт, который скопирует полный путь к папке где лежит этот файл, например: G:\INSTALL\. Но и имя файла тоже... Можно использовать переменные? Одна - путь к папке, а другая - имя файла?)
Далее скрипт открывает заранее заданный в нем текстовый файл (например C:\setups.txt) , УДАЛЯЕТ заданное кол-во строк от конца (т.е. не первые строки, а последние, скажем, 4 строки), а затем прописывает следующие строки:
"какая-то команда, ПУТЬ К ПАПКЕ
какая-то команда, ИМЯ ФАЙЛА"
например:
cd E:\INSTALL
del setup.exe
Возможно ли такое в батниках или шелл-скриптах? Я просто не знаю как реализована работа с переменными в батниках и как ему узнать путь к файлу или папке, если он в этой папке не лежит (постоянно копировать его из папки в папку - не вариант). В идеале, конечно, чтобы было как я и описал, т.е. через горячую клавишу или контекстное меню... но жду ваших предложений, чтобы хоть как-то выйти из положения.
Заранее спасибо.
VirusFUN
07-09-2012, 08:11
Может быть кому-то будет интересным:
В моей компании люди работают в старой проге, которой не существует аналогов и которая существует только под ДОС, но успешно работает во всех виндах до Висты... но у нас лицензии только на семерку! Проблема существует только с этой прогой. Я нашел решение в виде DOSBOX'а, прога запускает просто идеально (правда приходилось несколько раз переконфигить досбокс, подбирая видео-режимы и типы процессоров). Но, народ жалуется, что пропала возможность запускать файлы, созданные этим ПО, непосредственно из папок, где они лежат! Т.е. приходится копировать их в папку, которая монтируется как диск C:, а потом в самой проге их открывать... это и неудобно и долго.
Я придумал следующее:
монтируем папку с прогой как диск С. Например: mount C C:\MegaCad\ (здесь лежит исполняемый файл проги: megac.exe)
монтируем папку с файлом как див D. Например: mount D C:\Проекты\Cool\Бабруйск\Project1\ (здесь лежит файл проекта, например: project.mcp)
Переходим в диск D:\
запускаем прогу и в конце прописываем имя открываемого файла! Пример: C:\megac.exe project.mcp
Всё это прописывается в файл конфига досбокса, в самом конце! Затем запускается досбокс и выполняет все эти команды... Таким образом, прога запускается и открывает заданный файл, а конечный пользователь практически не замечает того, что работает в эмуляторе!
(Другие варианты не предлагать! Я ТОЧНО знаю, что это работает так и никак иначе, т.к. вопрос изучен досконально. Не стоит говорить, например, нафига переходить в диск D:, или почему бы не прописывать полный путь до нужного файла и т.п. Испробовано всё! Прога слушается только так.)
megaloman
07-09-2012, 11:00
нажимаем ХотКей, что запустит скрипт, который скопирует полный путь к папке где лежит этот файл, например: G:\INSTALL\. Но и имя файла тоже... Можно использовать переменные? Одна - путь к папке, а другая - имя файла?)@Echo Off
cls
rem Присваиваем переменным пути файла с батником
Set DPName=%0
Set DName=%~d0
Set PName=%~p0
Set DP=%~dp0
Set Name=%~nx0
rem Выдаём на экран значения переменных
Echo Полный путь к скрипту %DPName%
Echo Диск к скрипту %DName%
Echo Путь к скрипту %PName%
Echo Диск и путь к скрипту %DP%
Echo Имя скрипта и его расширение %Name% Читаем подсказку For /?
как ему узнать путь к файлу или папке, если он в этой папке не лежит - но есть же какой-то алгоритм, по которому Вы находите эту информацию. Имена папок, имена файлов? На чём основывается Ваш поиск?Далее скрипт открывает заранее заданный в нем текстовый файл (например C:\setups.txt) , УДАЛЯЕТ заданное кол-во строк от конца (т.е. не первые строки, а последние, скажем, 4 строки), а затем прописывает следующие строки: Не проще ли иметь файл, условно, setups.000, который берём как бланк, копируем его в setups.txt и ДОПИСЫВАЕМ в него строки? НапримерCopy C:\Setups.000 C:\Setups.txt
Echo cd /D E:\INSTALL>>C:\Setups.txt
Echo If %Errorlevel%==0 del setup.exe>>C:\Setups.txt
или контекстное меню... »
Батник для добавления пункта Путь к файлу в контекстное меню
:: Кодировка кириллица DOS (866)
Set Key=HKCU\Software\Classes\*\shell\Путь к файлу
:: Путь к батнику
Set PathScript=e:\Temp\test 1.bat
Reg Add "%Key%" /f
Reg Add "%Key%\command" /ve /t REG_SZ /d "\"%PathScript%\" \"%%1\"" /fзапустит скрипт, который скопирует ... путь к папке, ... имя файла
УДАЛЯЕТ заданное кол-во строк от конца (т.е. не первые строки, а последние, скажем, 4 строки), а затем прописывает следующие строки:
"какая-то команда, ПУТЬ К ПАПКЕ
какая-то команда, ИМЯ ФАЙЛА"
»
Сам батник test 1.bat
@Echo Off
SetLocal EnableDelayedExpansion
:: Путь к файлу setups.txt
Set file=e:\Temp\setups.txt
:: Путь к временному файлу
Set tmpfile=e:\Temp\setups.tmp
For /F "usebackq tokens=* delims=" %%i In ("%file%") Do Set /A cnt += 1
Set /A cnt -= 4
(For /F "usebackq tokens=* delims=" %%i In ("%file%") Do (
Echo %%i
Set /A cnt -= 1
If "!cnt!" LEQ "0" GoTo _marc
))>"%tmpfile%"
:_marc
(Echo cd "%~dp1"
Echo del "%~nx1")>>"%tmpfile%"
Copy /Y "%tmpfile%" "%file%"
Del /Q "%tmpfile%"
Пустые строки в setups.txt не считаются и в конечный результирующий файл setups.txt не попадают
VirusFUN
10-09-2012, 06:13
Всем огромное спасибо, свою идею реализовал так как хотелось! Но, у меня остались маленькие вопросы:
gora, скажи, зачем нужно это в твоем примере?: Del /Q "%file%"
Да и вообще, зачем нужен темп-файл?
Сначала я сделал всё так, как ты написал... Но, если удалять какой-то из файлов - то при следующей манипуляции (следующем запуске "test 1.bat") , существующий файл "setups.tmp" будет полностью перезаписан и будет содержать только эти строки:
Echo cd "%~dp1"
Echo del "%~nx1"
Вместо того, чтобы заменить ими только последние 2 строки.
Я закомментил удаление файла и всё работает как надо! К тому же.. я не пойму твою логику, ведь удаляться должен темп-файл, а у тебя наоборот. Опечатка?
Опечатка? »
Да, исправил.зачем нужен темп-файл? »
Вариант без временного файла:@Echo Off
SetLocal EnableDelayedExpansion
:: Путь к файлу setups.txt
Set file=e:\Temp\setups.txt
For /F "usebackq tokens=* delims=" %%i In ("%file%") Do Set /A cnt += 1& Set $!cnt!=%%i
Set /A cnt -= 4
(For /L %%i In (1,1,%cnt%) Do Echo !$%%i!
Echo cd "%~dp1"
Echo del "%~nx1")>"%file%"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.