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

Ответить
Аватара пользователя
madeinussr

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

Сообщение madeinussr »

Приветствую! Помогите разобраться.

Сделал пакетный файл такого содержимого:



Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

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[/i], оказалось что в %ProgramFiles% как буд-то находится "C:\Program Files (x86)". Хотя в SET видно что в %ProgramFiles% находится "C:\Program Files", а "C:\Program Files (x86)" находится в %ProgramFiles(x86)%. В чем проблема? Объясните.
Аватара пользователя
gora

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

Сообщение gora »

Цитата madeinussr:



В чем проблема?
CMD/BAT - Разное поведение SET при запуске из командной строки и из файла




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



Код:

Код: Выделить всё

%ProgramFiles%=C:\Program Files

, а при запуске в x86 среде будете иметь



Код:

Код: Выделить всё

%ProgramFiles%=C:\Program Files (x86)

Проверить, в какой среде произведен запуск батника, можно посмотрев в диспетчере задач на процесс cmd.exe. Если после него идет суффикс *32 значит батник запущен в x86 среде (из 32-разрядного приложения).
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата madeinussr:



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




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

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

Сообщение madeinussr »

Цитата Iska:



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




Каюсь... Total Comander. Извиняюсь, что в ввел в заблуждение. Проверил в проводнике - все работает.

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



Всех с праздником!
Аватара пользователя
gora

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

Сообщение gora »

Цитата madeinussr:



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






Код:

Код: Выделить всё

@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

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

Сообщение mwz »

Цитата madeinussr:



Каюсь... Total Comander. Извиняюсь, что в ввел в заблуждение
CMD/BAT - Разное поведение SET при запуске из командной строки и из файла




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



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

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

Сообщение Iska »

Цитата madeinussr:



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




Потому, что было решено использовать именно такое поведение среды для исполнения x86-приложений в x64-окружении.



WoW64 - Wikipedia, the free encyclopedia
;

File System Redirector (Windows)
из раздела
Running 32-bit Applications (Windows)
.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»