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

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

Ответить
Настройки темы
CMD/BAT - Разное поведение SET при запуске из командной строки и из файла

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


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

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


Изменения
Автор: madeinussr
Дата: 09-05-2015
Описание: убрал код в спойлер для компактности
Приветствую! Помогите разобраться.
Сделал пакетный файл такого содержимого:
Скрытый текст
Код: Выделить весь код
cls
@echo off

rem Путь к архиватору
set arc=%ProgramFiles%\7-Zip\7z.exe

rem Путь к папке с исходными директориями
set src=%ProgramFiles%\7-Zip\

rem Путь к папке, куда будут помещены выходные файлы
set dest=H:\123

rem Расширение выходных файлов
set ext=7z

cd %src%
for /D %%d in (*) do (
echo Compressing %%d.7z...
if exist "%dest%\%%d.%ext%" del /Q /F "%dest%\%%d.%ext%"
"%arc%" a -p111111 -mhe=on "%dest%\%%d.%ext%" "%src%\%%d" > NUL
)

echo Done!
pause


При запуске самого BAT-файла из командной строки все отлично, но при запуске его же из проводника сообщает, что системе не удается найти указанный путь. Убрал @echo off, оказалось что в %ProgramFiles% как буд-то находится "C:\Program Files (x86)". Хотя в SET видно что в %ProgramFiles% находится "C:\Program Files", а "C:\Program Files (x86)" находится в %ProgramFiles(x86)%. В чем проблема? Объясните.

Отправлено: 02:55, 09-05-2015

 

Аватара для gora

Ушёл из жизни


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

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


Цитата madeinussr:
В чем проблема? »
Проблема в среде запуска. При запуске в x64 среде Вы будете иметь
Код: Выделить весь код
%ProgramFiles%=C:\Program Files
, а при запуске в x86 среде будете иметь
Код: Выделить весь код
%ProgramFiles%=C:\Program Files (x86)
Проверить, в какой среде произведен запуск батника, можно посмотрев в диспетчере задач на процесс cmd.exe. Если после него идет суффикс *32 значит батник запущен в x86 среде (из 32-разрядного приложения).
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:56, 09-05-2015 | #2



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

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


Ветеран


Contributor


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

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


Цитата madeinussr:
но при запуске его же из проводника »
Из-под Проводника?! А не из-под какого-нибудь стороннего 32-разрядного файлового менеджера?

Отправлено: 05:53, 09-05-2015 | #3


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


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

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


Цитата Iska:
Из-под Проводника?! А не из-под какого-нибудь стороннего 32-разрядного файлового »
Каюсь... Total Comander. Извиняюсь, что в ввел в заблуждение. Проверил в проводнике - все работает.
Почему так происходит? Ведь в SET же указано, что в %ProgramFiles% находится "C:\Program Files", а в %ProgramFiles(x86)% находится "C:\Program Files (x86)" (ведь приложение выполняет операционная система а не файловый менеджер, служащий для навигации). Как из 32 разрядного приложения вызвать "C:\Program Files"? Только явно, через переменные среды не получится?

Всех с праздником!

Отправлено: 13:38, 09-05-2015 | #4


Аватара для gora

Ушёл из жизни


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

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


Цитата madeinussr:
через переменные среды не получится? »
Код: Выделить весь код
@Echo Off
Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x86 
Echo %xOS%
Set PF=%ProgramFiles%
If %xOS%==x64 Set PF=%ProgramW6432%
Echo %PF%
Pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:49, 09-05-2015 | #5

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


Contributor


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

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


Цитата madeinussr:
Каюсь... Total Comander. Извиняюсь, что в ввел в заблуждение »
Последние версии Total Commander существуют как в 32-х, так и в 64-битном исполнении.

При установке комбинированной версии (последняя – tcm851ax32_64.exe) ставятся и та и другая. В 64-битной среде имеет смысл пользоваться 64-битной версией, а 32-битную использовать лишь в особых случаях, когда без неё вам лично не обойтись: в ней существуют и некоторые другие ограничения, которые 64-битная Windows накладывает на 32-битные программы и на их окружение без ведома самих этих программ.

-------
Mikhail Zhilin


Отправлено: 14:22, 09-05-2015 | #6


Ветеран


Contributor


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

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


Цитата madeinussr:
Почему так происходит? Ведь в SET же указано, что в %ProgramFiles% находится "C:\Program Files", а в %ProgramFiles(x86)% находится "C:\Program Files (x86)" (ведь приложение выполняет операционная система а не файловый менеджер, служащий для навигации). »
Потому, что было решено использовать именно такое поведение среды для исполнения x86-приложений в x64-окружении.

WoW64 - Wikipedia, the free encyclopedia;
File System Redirector (Windows) из раздела Running 32-bit Applications (Windows).
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:25, 09-05-2015 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Запуск файла с помощью программы из командной строки DemchaAV Скриптовые языки администрирования Windows 6 29-11-2015 12:11
CMD/BAT - запуск командной строки от имени администратора из командной строки jah Скриптовые языки администрирования Windows 18 19-09-2015 08:59
Доступ - [решено] Запуск командной строки от имени Администратора из командной строки emcee Microsoft Windows 8 и 8.1 10 17-05-2014 21:37
Любой язык - Проблема при создании юзера из командной строки BACbOK Скриптовые языки администрирования Windows 3 10-08-2012 23:07
CMD/BAT - [решено] создание ярлыка, файла из командной строки? super_bitard Скриптовые языки администрирования Windows 1 24-03-2011 07:42




 
Переход