Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Разное поведение SET при запуске из командной строки и из файла (http://forum.oszone.net/showthread.php?t=299541)

madeinussr 09-05-2015 02:55 2505352

Разное поведение SET при запуске из командной строки и из файла
 
Приветствую! Помогите разобраться.
Сделал пакетный файл такого содержимого:
Скрытый текст
Код:

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)%. В чем проблема? Объясните.

gora 09-05-2015 04:56 2505354

Цитата:

Цитата madeinussr
В чем проблема? »

Проблема в среде запуска. При запуске в x64 среде Вы будете иметь
Код:

%ProgramFiles%=C:\Program Files
, а при запуске в x86 среде будете иметь
Код:

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

Iska 09-05-2015 05:53 2505357

Цитата:

Цитата madeinussr
но при запуске его же из проводника »

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

madeinussr 09-05-2015 13:38 2505439

Цитата:

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

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

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

gora 09-05-2015 13:49 2505441

Цитата:

Цитата 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


mwz 09-05-2015 14:22 2505450

Цитата:

Цитата madeinussr
Каюсь... Total Comander. Извиняюсь, что в ввел в заблуждение »

Последние версии Total Commander существуют как в 32-х, так и в 64-битном исполнении.

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

Iska 09-05-2015 23:25 2505643

Цитата:

Цитата 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).


Время: 22:49.

Время: 22:49.
© OSzone.net 2001-