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

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

Ответить
Настройки темы
CMD/BAT - [решено] Проблема с пробелами в названии

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


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

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


День добрый!

Есть батник hash_lst1.cmd который высчитывает хеш-значения файлов по списку.
Код: Выделить весь код
@echo off 
rem Вычисление хэш-значений файлов по списку 
rem Вызов: hash_lst1 [file.lst] 
rem где, file.lst - список контролируемых файлов (по умолчанию - hash.lst) 
if empty%1==%1empty (set hash_lst=hash.lst) else set hash_lst=%1
for /F %%i in (%hash_lst%) do for %%f in ("%%i") do "%~dp0\hash3411" "%%f"
hash3411 - программка которая вычисляет хэш для файла

Список файлов hash_expert.lst примерно такого содержания
Код: Выделить весь код
P:\keys\Наши эксперты\Новая Ляля.cfg
P:\keys\Наши эксперты\Новоуральск.cfg
И собственно сам батник hash_expert_set.cmd который вызывается на сервере
Код: Выделить весь код
@echo off 
set dirLib=T:\Отдел расчетов\Процессы\Сеть\lib 
cd /d "%~dp0" 
call "%dirLib%\hash_lst1" hash_expert.lst > hash_expert.has 
echo %date% %time% Обновление списка целостности файлов hash_expert.lst. %username% %computername% >> hash_expert.log
При выполнении пишет - No such file or directory

Опытным путем выяснилось, что проблема в пробелах в названии папки и некоторых файлов которые указаны в hash_expert.lst (Типа P:\keys\Наши эксперты\Новая Ляля.cfg)
Переименовать ни папку ни файл не предоставляется возможным.
А отредактировать батник не могу так чтоб работал корректно. Подскажите что нужно изменить

Отправлено: 14:54, 30-03-2011

 

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


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

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


Если в адресе\имени файла присутствует пробел, то адресс\имя необходимо включать в кавычки

Цитата Sat_Kelman:
set dirLib=T:\Отдел расчетов\Процессы\Сеть\lib »
Код: Выделить весь код
set dirLib="T:\Отдел расчетов\Процессы\Сеть\lib"

Отправлено: 15:41, 30-03-2011 | #2



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

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


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


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

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


Вот этот путь как раз не влияет, с таким путем все прекрасно работает. Проверено
Проблема в P:\keys\Наши эксперты\Новая Ляля.cfg

Как я понимаю надо поменять что-то в hash_lst1.cmd

Отправлено: 15:48, 30-03-2011 | #3



Moderator


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

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


Sat_Kelman, кодировка DOS-866

Отправлено: 15:52, 30-03-2011 | #4


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


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

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


И не в кодировке проблема. Такая же проверка есть для других файлов и других папок, там все работает. Но там то нет пробелов в названии папки в списке.
Завтра приду на работу, попробую чтоб он на экран вывел какого файла он найти не может. Отсюда и танцевать будем.

Отправлено: 17:10, 30-03-2011 | #5


Ветеран


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

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


1. Попробуйте добавить:
Код: Выделить весь код
for /f "delims=" %%i in (%hash_lst%) do …
2. Убедиться, что кодировка «hash_expert.lst» — DOS-866.

Было бы желательно объяснить назначение сиих действ, и что должно получаться в итоге.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:00, 30-03-2011 | #6


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


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

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


Назначение:
Есть сетевая папка P:\keys\Наши эксперты\. В нее складываются файлы конфигурации.
Цель - проверка целостности этих файлов. Например изменили мы конфигурацию, или новый файл конфиг добавили, то создаем файл hash_expert.lst, в котором указаны полные пути к файлам целостность которых нужно контролировать.
Далее запускаем файл hash_expert_set.cmd. Он запускает файл hash_lst1.cmd и передает ему что нужно хешировать.
Файл hash_lst1.cmd берет каждый файл по полному пути из файла lst, и высчитывает его хеш, результат записывает в файл hash_expert.has.
В итоге имеем файл hash_expert.has, в котором будут эталонные хеши файлов.

А уже на сервере периодически запускается проверка, где хеш этих файлов сравнивается с эталонным, и если они не совпадают значит файл нарушен/подменен/удален/... и сообщается кому следует

Отправлено: 20:20, 30-03-2011 | #7


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


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

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


Изменил строчку вот так
Код: Выделить весь код
for /F %%i in (%hash_lst%) do for %%f in ("%%i") do  %%f
пишет теперь
""P:\keys\Наши"" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
До первого пробела режет

Отправлено: 06:44, 31-03-2011 | #8


Ветеран


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

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


Запутанно… Впрочем, кто знает Вашу кухню.

Попробуйте так (предварительно сделав резервные копии исходных пакетных файлов):

hash_expert_set.cmd
Код: Выделить весь код
@echo off
set dirLib=T:\Отдел расчетов\Процессы\Сеть\lib
cd /d "%~dp0"
call "%dirLib%\hash_lst1" hash_expert.lst
echo %date% %time% Обновление списка целостности файлов hash_expert.lst. %username% %computername% >> hash_expert.log
T:\Отдел расчетов\Процессы\Сеть\lib\hash_lst1.cmd
Код: Выделить весь код
@echo off
rem Вычисление хэш-значений файлов по списку
rem Вызов: hash_lst1 [file.lst]
rem где, file.lst - список контролируемых файлов (по умолчанию - hash.lst)

set hash_lst=%~1

if not defined hash_lst set hash_lst=hash.lst

if exist "hash_expert.has" del /q /f "hash_expert.has"

for /f "usebackq delims=" %%i in ("%hash_lst%") do (
	"%~dp0\hash3411.exe" "%%i" >>hash_expert.has
)
Sat_Kelman, такой ещё вопрос: чем именно пользуетесь для расчёта хэшей, т.е. что есть «hash3411.exe» и можно ли его «пощупать»?

Отправлено: 06:59, 31-03-2011 | #9


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


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

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


Проблема решилась!!!
убрал кавычки в "%%f"
for /F %%i in (%hash_lst%) do for %%f in ("%%i") do "%~dp0\hash3411" %%f

hash3411.exe - понятия не имею что за программка. Работает в режиме командной строки, то есть запускается из батника, и она уже возвращает хэш. Сам в инете про нее искал, не нашел. Была до меня уже.

Отправлено: 07:40, 31-03-2011 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Пути с пробелами в кавычках как победить? trn Скриптовые языки администрирования Windows 1 02-11-2010 12:32
Любой язык - *.cmd: путь с пробелами Vygov Скриптовые языки администрирования Windows 7 11-10-2010 13:57
CMD/BAT - [решено] Путь с пробелами Serezzza Скриптовые языки администрирования Windows 1 02-01-2010 19:34
Проблемма с пробелами... Vlad Drakula Вебмастеру 10 25-12-2004 03:09
русские символы в названии машин angeldragon Сетевые технологии 2 11-08-2004 18:33




 
Переход