1 (изменено: Molnia, 2014-07-28 09:18:42)

Тема: CMD/BAT: Путь из txt

Ребята! Подскажите, пожалуйста, никак не могу добить батник.
Дело вот в чем: решила сделать автообновлялку для некой программы. Что нужно - посмотреть в определенной папке и найти самый последний архив. Потом разархивировать с заменой в папки с программой.
Все это я сделала, и батник работает. Т.е. я сортирую файлы в папке с обновлениями, беру первый и распаковываю.
Решила усовершенствовать файл. Т.е. научиться брать путь к обновлениям и к программе из некоего внешнего файла config.txt. Вот тут начались проблемы. Т.е. по результатам tokens у меня вроде как путь определяется правильно. НО почему-то он как-то странно обрабатывает его в цикле и как итог "файл не найден"
Постараюсь показать на примере, а то по-моему ничего не понятно))

1   @echo off
2   chcp 1251
3   set config=config.txt 
4   FOR /F "usebackq tokens=1" %%I IN ("%config%") DO  set update_dir=%%I 
5   echo update dir - %update_dir%
6   pause
7   rem set update_dir=C:\Update
8   set elbrus_path=C:\Elbrus - 
9   FOR /F %%? IN ('dir "%update_dir%\*.zip" /b/a-d/o-d') DO set "newestfilename=%%?" & goto end
10 :end
11 echo Последнее обновление - %newestfilename%
12 pause
13 "C:\Program Files\WinRAR\winrar.exe" x "%update_dir%\%newestfilename%" "%elbrus_path%DEMO\"  -y

вот смотрите. в 4 строке я задаю путь к обновлялке. в конфиге просто путь:
C:\Update
В 5 вывожу, чтобы проверить. Действительно, так и есть.
В 9 строке сортирую и беру самый новый. Результат - файл не найден.
НО если раскомментировать 7 строку, где напрямую задаю тот же путь, то работает.
Вопрос: ПОЧЕМУ?
Подозреваю, что это как-то связано с табуляциями и прочим, но никак не пойму где собака зарыта. Помогите, пожалуйста!

P.S. простите за такое пространное объяснение.

2

Re: CMD/BAT: Путь из txt

Molnia, добавьте префикс скриптового языка в название темы, обрамите код скрипта тегом "code".

3

Re: CMD/BAT: Путь из txt

Molnia,
а зачем в 9-й строке newestfilename=%%? взято в кавычки?

И, да, выполните, пожалуйста, справедливые требования модератора...

4

Re: CMD/BAT: Путь из txt

а зачем в 9-й строке newestfilename=%%? взято в кавычки?

по всей видимости незачем. Однако, на работу это не влияет

5

Re: CMD/BAT: Путь из txt

Решила усовершенствовать файл. Т.е. научиться брать путь к обновлениям и к программе из некоего внешнего файла config.txt.

set sConfigFile=config.txt

if exist "%sConfigFile%" (
    >nul set /p sUpdateFolder=<"%sConfigFile%"
) else (
    echo Config file [%sConfigFile%] not found.
    exit /b 1
)

И никаких «chcp 1251». «config.txt» должен быть в OEM/866.

НО если раскомментировать 7 строку, где напрямую задаю тот же путь, то работает.

Вопрос: ПОЧЕМУ? sad

Нужно содержимое реального «config.txt», упакованного в архив.

6 (изменено: Molnia, 2014-09-22 11:38:45)

Re: CMD/BAT: Путь из txt

был завал совсем, временно этот вопрос отложила.


убрала chcp, сделала в 866. все равно такая же ерунда выходит

7

Re: CMD/BAT: Путь из txt

Molnia, а конфиг отдельным файлом, позвольте полюбопытствовать, зачем? Тем паче, что если текстовый файл не содержит ничего, кроме пути, то не проще ли прописать его в самом командном сценарии? Например:

@echo off
  setlocal
    for /f "tokens=1 delims=:" %%i in (
      'findstr /nc:"#config" "%~f0"'
    ) do (
      set "n=%%i"
    )
   for /f "tokens=1,* delims==" %%i in (
     'more +%n% "%~f0"'
   ) do dir "%%j"
  endlocal
exit /b

#config
Path=C:\Documents and Settings\ѓ®бвм

Сохраняем все это безобразие в однобайтовой кодировке (cp866) и все.
С другой стороны, если сохранять сценарий в 1251, тогда останется дополнить:

@echo off
  setlocal
    chcp 1251>nul
    for /f "tokens=1 delims=:" %%i in (
      'findstr /nc:"#config" "%~f0"'
    ) do (
      set "n=%%i"
    )
   for /f "tokens=1,* delims==" %%i in (
     'more +%n% "%~f0"'
   ) do dir "%%j"
  endlocal & chcp 866>nul
exit /b

#config
Path=C:\Documents and Settings\Гость

ХР пути я использовал здесь для наглядности.
Вообще, что касается (раз)архивирования, то конфиги пихать лучше именно в конец командного сценария: повышается мобильность, проще отлаживать и дыр и пыр.

8

Re: CMD/BAT: Путь из txt

Molnia пишет:

убрала chcp, сделала в 866. все равно такая же ерунда выходит sad

Читайте всплошную, не через строку:

alexii пишет:

Нужно содержимое реального «config.txt», упакованного в архив.

9 (изменено: Molnia, 2014-09-22 15:40:40)

Re: CMD/BAT: Путь из txt

alexii пишет:
Molnia пишет:

убрала chcp, сделала в 866. все равно такая же ерунда выходит sad

Читайте всплошную, не через строку:

alexii пишет:

Нужно содержимое реального «config.txt», упакованного в архив.


прошу прощения. Прикладывала архив. Почему-то не прицепился.

Post's attachments

config.rar 89 b, 5 downloads since 2014-09-22 

You don't have the permssions to download the attachments of this post.

10

Re: CMD/BAT: Путь из txt

greg zakharov пишет:

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

да оно пока так и работает. Хотелось все по уму сделать. Да и это не единственное что можно из конфига брать. Но судя по всему проще действительно пойти вашим путем. Спасибо.

11

Re: CMD/BAT: Путь из txt

Molnia, уберите концевой пробел в 4-ой строке, и "будет Вам счастье".

12

Re: CMD/BAT: Путь из txt

Yury пишет:

Molnia, уберите концевой пробел в 4-ой строке, и "будет Вам счастье".


ёлки-палки, вот так всегда бывает. Спасибо большое!!!