从Windows cmd.exe更改Perl目录

时间:2010-03-08 22:23:52

标签: perl cmd chdir

根据手册chdir如果可能,将工作目录更改为EXPR

此脚本从cmd.exe执行时执行:

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

导致此输出:

C:\some\path\

但是当我返回到命令提示符时 - 我仍然在原始目录中。我误解了chdir的目的吗?

3 个答案:

答案 0 :(得分:7)

请参阅常见问题解答I {changed directory, modified my environment} in a perl script. How come the change disappeared when I exited the script? How do I get my changes to be visible?

  

从最严格的意义上说,它无法完成 - 脚本作为与它从启动的shell不同的进程执行。对进程的更改不会反映在更改后创建的任何子级中的父级中。

同样的答案也适用于Windows。

您可以通过弄乱快捷方式和/或注册表来修改后续cmd.exe调用或子进程的起始目录。

答案 1 :(得分:6)

当一个shell运行一个程序时,它实际上是forks然后执行该程序 - 在本例中是你的perl脚本。该分叉进程中的目录已更改,然后该进程终止。然后,您将返回到原始shell进程。

答案 2 :(得分:1)

我通过使用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)比源脚本旧。

相关问题