Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
1

Скобки в составе пути команды для цикла приводят к критическому сбою (на примере FSUM)

16.07.2013, 02:07. Показов 3005. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Но почему это происходит?

(не забудьте положить файл fsum.exe рядом) Ключи запуска программ, вспомогательные утилиты (Windows Resource Kit, Support Tools)

А теперь удалите строки №№ 5,6
Скрипт только для x64-битной ОСи.

Bash
1
2
3
4
5
6
7
8
9
10
11
@echo off
SetLocal
set e=iexplore.exe
set p=c:\Program Files (x86)\Internet Explorer
set "p=%p:(=^(%"
set "p=%p:)=^)%"
echo path=%p%
echo name=%e%
pause
for /f %%a in ('""%~dp0fsum.exe" -md5 -d"%p%" "%e%""') do echo Cheksum: -----%%a------
pause
Без замены спецсимволов на знаки экранирования нашел такой выход (но ведь это монстр!) :
- добавил CMD /C и дополнительные внешние кавычки:

Bash
1
2
3
4
5
6
7
8
9
10
11
@echo off
SetLocal
set e=iexplore.exe
set p=c:\Program Files (x86)\Internet Explorer
::set "p=%p:(=^(%"
::set "p=%p:)=^)%"
echo path=%p%
echo name=%e%
pause
for /f %%a in ('"cmd /c ""%~dp0fsum.exe" -md5 -d"%p%" "%e%"""') do echo Cheksum: -----%%a------
pause
Почему? И можно ли сократить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.07.2013, 02:07
Ответы с готовыми решениями:

В составе баскетбольной команды 12 игроков. Сколько игроков в команде имеют рост, меньший среднего роста команды?
!!!

Динамическая информация о составе футбольной команды
Составить программу, которая содержит динамическую информацию о составе футбольной команды....

Режимы адресации на примере команды
Добрый день, уважаемые форумчане, заранее извиняюсь за глупый вопрос, Только начал изучать...

Скобки в пути реестра
Здравствуйте, уважаемые форумчане! Уже второй день не могу победить следующую проблему: Мне...

20
1779 / 761 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
16.07.2013, 16:35 2
Dragokas, про переменную забыли?
Bash
1
2
3
4
5
6
7
8
@echo off
SetLocal
set e=iexplore.exe
set p=%ProgramFiles(x86)%\Internet Explorer
echo path=%p%
echo name=%e%
for /f %%a in ('fsum.exe -md5 -d"%p%" "%e%"') do echo Cheksum: -----%%a------
pause
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
16.07.2013, 16:54  [ТС] 3
sov44, не забыл. Это просто пример.

У меня эта часть оформлена как отдельная функция.

Смотри, если заменить fsum.exe на "%~dp0fsum.exe", то начнутся проблемы.
У меня ведь скрипт будет запускаться с повышенными правами.
Получается единственный выход: перейти в каталог cd /d "%~dp0" и не окружать кавычками запускающую программу...

И все еще мучает вопрос, почему так происходит.
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
10.08.2013, 19:37  [ТС] 4
Будем считать, что наиболее краткая и синтаксически верная запись - это:

1) перейти в каталог, где находится fsum
2) запустить указав путь к проверяемому файлу.
2) вернуться в исходный каталог (опционально).

Итак:

Bash
1
2
3
4
5
6
7
8
9
@echo off
SetLocal EnableExtensions
set e=iexplore.exe
set p=c:\Program Files (x86)\Internet Explorer
 
pushd "%~dp0"
for /f %%a in ('fsum.exe -md5 -d"%p%" "%e%"') do echo Cheksum: -----%%a------
popd
pause
1
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
11.08.2013, 12:56 5
Не открывается fsum.exe
Вот скриншот. (забыл приложить в предыдущем сообщении)

 Комментарий модератора 
Сообщения выделены из темы: WiLD: SFC и хеш-сумма. Проверка системных файлов*
Миниатюры
Скобки в составе пути команды для цикла приводят к критическому сбою (на примере FSUM)  
0
Модератор
Эксперт JS
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
11.08.2013, 16:28 6
Ну так через консоль запускай.
Win+R -> cmd.exe
И там пиши "C:\Users\SYSTEM32\Desktop\fsum"
1
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
11.08.2013, 18:38 7
Да, спасибо, заработало.
Однако
запускаю fsum по вышеописанному способу.
Bash
1
2
3
fsum.exe -md5 C:\Users\SYSTEM32\Desktop\test.txt
>"fsum.exe" не является внутренней или внешней
 командой, исполняемой программой или пакетным файлом.
Добавлено через 7 минут
Хм... Разобрался.

Добавлено через 17 минут
Bash
1
C:\Users\System32\Desktop\fsum.exe -md5 C:\Users\System32\Desktop\test.txt >log.txt
log.txt:
; SlavaSoft Optimizing Checksum Utility - fsum 2.52.00337 <www.slavasoft.com>
;
; Generated on 08/11/13 at 18:20:22
;
NOT FOUND ***** test.txt

Ну что это такое?..
0
Модератор
Эксперт JS
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
12.08.2013, 10:30 8
Файлы на рабочем столе могут находиться не только в C:\Users\%username%\Desktop
Правая кнопка мыши по файлу, свойства. Там будет путь к нему. Или, Shift + ПКМ по файлу и "Копировать как путь"
0
sov44
12.08.2013, 11:32
  #9

Не по теме:

хранить рабочие файлы на рабочем столе - признак ламера :)

0
MihaniX
12.08.2013, 12:10
  #10

Не по теме:

А как понять эту винду?
Указываю путь к fsum c:\users\username\desktop\fsum.exe
Все норм. Запускается.
Указываю путь к рабочему файлу: c:\users\username\desktop\test.txt - ругается. Нет блин надо обязательно
c:\Пользователи\username\Рабочий стол\test.txt :wall:

Цитата Сообщение от sov44 Посмотреть сообщение
хранить рабочие файлы на рабочем столе - признак ламера
Ну мне норм было когда я с батниками эксперементировал. Да и сейчас не понимаю чем это плохо кроме как путь долгий указывать.

1
Модератор
Эксперт JS
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
12.08.2013, 12:11 11
Вот-вот. Мне на рабочем столе удобно.
1
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
12.08.2013, 13:22 12
Ну что за программа...
Bash
1
c:\users\username\desktop\fsum.exe -md5 c:\Пользователи\username\Рабочий стол\Win7\x64\cmd.exe >log.txt
log.txt
; SlavaSoft Optimizing Checksum Utility - fsum 2.52.00337 <www.slavasoft.com>
;
; Generated on 08/12/13 at 13:17:03
;

Что я сейчас не так делаю???
0
Модератор
Эксперт JS
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
12.08.2013, 13:44 13
Как вариант - кодировка русских буков. Используй файл в корне диска C:\
0
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
12.08.2013, 13:49 14
Опять
; SlavaSoft Optimizing Checksum Utility - fsum 2.52.00337 <www.slavasoft.com>
;
; Generated on 08/12/13 at 13:48:30
;


Да что за прога то такая? Или это у меня с виндой?..
0
Модератор
Эксперт JS
5198 / 2080 / 406
Регистрация: 06.01.2013
Сообщений: 4,794
12.08.2013, 13:57 15
А сделай-ка без перенаправления.
0
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
12.08.2013, 14:03 16
Да пробовал я... То же самое
Может дело в том что программа не рассчитана на семерку?
0
1779 / 761 / 130
Регистрация: 09.04.2011
Сообщений: 1,325
12.08.2013, 14:28 17
MihaniX, на семёре работает http://savepic.su/2992292.htm
может у вас версия не последняя?
п.с. возьмите пути в кавычки
0
140 / 50 / 2
Регистрация: 06.08.2013
Сообщений: 292
Записей в блоге: 4
12.08.2013, 22:29 18
И не помогло. Значит кривая винда. Попробую запустить на виртуалке. Отпишусь о результатах.

Добавлено через 6 часов 50 минут
Так и не установил виртуалку. Но самое главное, что это только мои проблемы. Значит у других должно работать и я могу начинать писать скрипт
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
13.08.2013, 02:08  [ТС] 19
MihaniX, а я пример для кого писал в этой же теме?
Цитата Сообщение от Dragokas Посмотреть сообщение
fsum пример использование с путями тема с кодом
Вывод: всегда нужно внимательно читать хелп к утилите.
Авторы постарались все очень подробно расписать, за что им спасибо: спойлер

Еще раз объясню:

Утилита привередливая.

Вот это нельзя проверять: c:\Пользователи\username\Рабочий стол\Win7\x64\cmd.exe
Путь указывается отдельно - ключем -d

fsum обычно должен лежать рядом с батником.
Путь к fsum тоже желательно не указывать. Если поместить потом в for работать не будет. Из темы выше это видно.
Поэтому, сначала:

Bash
1
cd /d "%~dp0"
делаем перед запуском fsum.


Не по теме:

Извините, что поздно зашел. Работа...

1
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
21.08.2013, 21:02  [ТС] 20
MihaniX, вот такой у тебя работает?

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
SetLocal EnableExtensions
:: Будем проверять в папке с данным Batch
set folder=%~dp0
:: Урезаем концевой слэш
set folder=%folder:~0,-1%
 
:: fsum находится в папке с данным Batch, переходим в нее
pushd "%~dp0"
:: %~nx0 - считаем контрольную сумму этого же Batch-файла
for /f "delims=- " %%a in ('fsum.exe -md5 -d"%folder%" "%~nx0" 2^>NUL') do set CheckSum=%%a
echo MD5=%CheckSum%
 
popd
pause
Это рассчет MD5 скриптом самого себя.

Скачай с архива.
Запусти с обычными правами.
Потом с повышенными.
Должно работать и так, и так.
Вложения
Тип файла: rar FSUM_self_make_MD5.rar (78.8 Кб, 9 просмотров)
0
21.08.2013, 21:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2013, 21:02
Помогаю со студенческими работами здесь

Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки
Доброго времени суток. Подскажите пожалуйста алгоритм или путь к решению задачи, используя СТЕК ...

Для каждой открывающей скобки найти позицию ей соответствующей закрывающей скобки
Даны 4 вида скобок () {} &lt;&gt;. Для каждой открывающей скобки найти позицию ей соответствующей...

Поиск кратчайшего пути в графе(на примере лабиринта)
Доброго времени суток, Уважаемые Форумчане. Решил изучить алгоритмы(хотя бы самые популярные). В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru