Изменение каталога Perl из Windows cmd.exe - PullRequest
4 голосов
/ 09 марта 2010

Согласно инструкции, chdir , Изменяет рабочий каталог на EXPR, если это возможно.

Этот скрипт при запуске из cmd.exe:

my $path = 'C:\\some\\path\\';
print "$path\n";
chdir("$path") or die "fail $!";

приводит к выводу:

C:\some\path\

но когда я возвращаюсь в командную строку - я все еще в исходном каталоге. Я неправильно понимаю цель chdir?

Ответы [ 3 ]

7 голосов
/ 09 марта 2010

См. FAQ Я {изменил каталог, изменил мою среду} в сценарии perl. Почему изменения исчезли, когда я вышел из сценария? Как мне сделать мои изменения видимыми?

В строгом смысле этого сделать нельзя - скрипт выполняется как процесс, отличный от оболочки, из которой он был запущен. Изменения в процессе не отражаются в его родительском & mdash; только в дочерних процессах, созданных после изменения.

Тот же ответ относится и к Windows.

Вы можете изменить начальный каталог последующих вызовов cmd.exe или дочерних процессов, связавшись с ярлыками и / или реестром.

6 голосов
/ 09 марта 2010

Когда оболочка запускает программу, она по существу разветвляется, а затем запускает программу - в данном случае, ваш скрипт на perl. Каталог в этом разветвленном процессе был изменен, и затем этот процесс умирает. Затем вы возвращаетесь к исходному процессу оболочки.

1 голос
/ 09 марта 2010

Я изменил каталоги и командные среды с помощью переключателя perl -x, чтобы выполнить код Perl, встроенный в файл.

@rem = '--*-Perl-*--'
@echo off
set TMPBAT=%TMP%\%0_temp.bat
perl -x -S %0 %*
if %errorlevel% == 2000 goto cleanup
goto endofperl
#!perl
#line 9

use strict;
use warnings; 
use BatchTool;


__END__
:endofperl
if exist %TMPBAT% call %TMPBAT%
:cleanup
set TMPBAT=

BatchTool - это модуль, который записывает команды DOS в $ENV{TMPBAT}, если 1) он не существует или 2) старше исходного скрипта.

...