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

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

Ответить
Настройки темы
CMD/BAT - Скопировать путь к открытому файлу и прописать его в конце текстового файла.

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


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

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


Не знал как еще сформулировать заголовок, но задача такая:
Нужно скопировать путь к папке, где лежит указанный файл. (Например, заходим на флешку в папку INSTALL, а в этой папке выделяем файл и нажимаем ХотКей, что запустит скрипт, который скопирует полный путь к папке где лежит этот файл, например: G:\INSTALL\. Но и имя файла тоже... Можно использовать переменные? Одна - путь к папке, а другая - имя файла?)
Далее скрипт открывает заранее заданный в нем текстовый файл (например C:\setups.txt) , УДАЛЯЕТ заданное кол-во строк от конца (т.е. не первые строки, а последние, скажем, 4 строки), а затем прописывает следующие строки:
"какая-то команда, ПУТЬ К ПАПКЕ
какая-то команда, ИМЯ ФАЙЛА"

например:
cd E:\INSTALL
del setup.exe

Возможно ли такое в батниках или шелл-скриптах? Я просто не знаю как реализована работа с переменными в батниках и как ему узнать путь к файлу или папке, если он в этой папке не лежит (постоянно копировать его из папки в папку - не вариант). В идеале, конечно, чтобы было как я и описал, т.е. через горячую клавишу или контекстное меню... но жду ваших предложений, чтобы хоть как-то выйти из положения.

Заранее спасибо.

Отправлено: 07:46, 07-09-2012

 

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


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

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


Может быть кому-то будет интересным:
В моей компании люди работают в старой проге, которой не существует аналогов и которая существует только под ДОС, но успешно работает во всех виндах до Висты... но у нас лицензии только на семерку! Проблема существует только с этой прогой. Я нашел решение в виде DOSBOX'а, прога запускает просто идеально (правда приходилось несколько раз переконфигить досбокс, подбирая видео-режимы и типы процессоров). Но, народ жалуется, что пропала возможность запускать файлы, созданные этим ПО, непосредственно из папок, где они лежат! Т.е. приходится копировать их в папку, которая монтируется как диск C:, а потом в самой проге их открывать... это и неудобно и долго.

Я придумал следующее:
монтируем папку с прогой как диск С. Например: mount C C:\MegaCad\ (здесь лежит исполняемый файл проги: megac.exe)
монтируем папку с файлом как див D. Например: mount D C:\Проекты\Cool\Бабруйск\Project1\ (здесь лежит файл проекта, например: project.mcp)
Переходим в диск D:\
запускаем прогу и в конце прописываем имя открываемого файла! Пример: C:\megac.exe project.mcp

Всё это прописывается в файл конфига досбокса, в самом конце! Затем запускается досбокс и выполняет все эти команды... Таким образом, прога запускается и открывает заданный файл, а конечный пользователь практически не замечает того, что работает в эмуляторе!

(Другие варианты не предлагать! Я ТОЧНО знаю, что это работает так и никак иначе, т.к. вопрос изучен досконально. Не стоит говорить, например, нафига переходить в диск D:, или почему бы не прописывать полный путь до нужного файла и т.п. Испробовано всё! Прога слушается только так.)

Отправлено: 08:11, 07-09-2012 | #2



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

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


Ветеран


Contributor


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

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


Цитата:
нажимаем ХотКей, что запустит скрипт, который скопирует полный путь к папке где лежит этот файл, например: 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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 07-09-2012 в 11:35.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:00, 07-09-2012 | #3


Аватара для gora

Ушёл из жизни


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

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


Цитата VirusFUN:
или контекстное меню... »
Батник для добавления пункта Путь к файлу в контекстное меню
Код: Выделить весь код
:: Кодировка кириллица 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
Цитата VirusFUN:
запустит скрипт, который скопирует ... путь к папке, ... имя файла
УДАЛЯЕТ заданное кол-во строк от конца (т.е. не первые строки, а последние, скажем, 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 не попадают

Последний раз редактировалось gora, 10-09-2012 в 06:46. Причина: Исправлено удаление временного файла

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:50, 07-09-2012 | #4


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


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

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


Всем огромное спасибо, свою идею реализовал так как хотелось! Но, у меня остались маленькие вопросы:

gora, скажи, зачем нужно это в твоем примере?: Del /Q "%file%"
Да и вообще, зачем нужен темп-файл?

Сначала я сделал всё так, как ты написал... Но, если удалять какой-то из файлов - то при следующей манипуляции (следующем запуске "test 1.bat") , существующий файл "setups.tmp" будет полностью перезаписан и будет содержать только эти строки:
Echo cd "%~dp1"
Echo del "%~nx1"
Вместо того, чтобы заменить ими только последние 2 строки.

Я закомментил удаление файла и всё работает как надо! К тому же.. я не пойму твою логику, ведь удаляться должен темп-файл, а у тебя наоборот. Опечатка?

Отправлено: 06:13, 10-09-2012 | #5


Аватара для gora

Ушёл из жизни


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

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


Цитата VirusFUN:
Опечатка? »
Да, исправил.
Цитата VirusFUN:
зачем нужен темп-файл? »
Вариант без временного файла:
Код: Выделить весь код
@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%"
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:08, 10-09-2012 | #6



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] путь к файлу mamont1 Скриптовые языки администрирования Windows 2 18-07-2011 16:05
[решено] Как прописать путь Centrinar AutoIt 3 09-03-2011 02:17
C/C++ - Обьекты,Form, путь к файлу. K1nDeR45 Программирование и базы данных 0 06-10-2010 12:08
[решено] Как в программе прописать путь к языковому файлу? dima1981 Хочу все знать 3 16-05-2009 14:16
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28




 
Переход