Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 5065
  • Last Modified:

How do you get the current working directory ( CWD ) on Windows, where the script lives, for example

I need to execute a program that is parallel to my script, but need full path to cwd.  I know how to execute it by hardcoding the cwd, but how do I get it at runtime?
0
mark_at_acc
Asked:
mark_at_acc
  • 3
  • 3
  • 2
  • +1
2 Solutions
 
nicholassolutionsCommented:
$path = system('pwd');

cheers
0
 
mark_at_accAuthor Commented:
The problem is, some machines that the script will run on will have cygwin tools installed...in that case, you end up with a path like:

         /cygdrive/c/marks/bii4

instead of:

         c:\marks\bii4

Sorry, should have mentioned that initially...
0
 
inq123Commented:
Hi mark_at_acc,

this one would work on windows:

use File::Spec;

my $cwd = File::Spec->rel2abs(".");

Cheers!
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
FishMongerCommented:
use Cwd;
my $dir = getcwd;
0
 
inq123Commented:
FishMonger,

Nice solution!  But getcwd returns incorrect path separator on Windows (at least in case for ActivePerl, but I imagine the same case for perl on cygwin too, which OP pointed out as a problem).  Just a thought.
0
 
FishMongerCommented:
inq123 ,

You're right.  I didn't refresh my screen prior to posting so I missed Mark's updated post, and since I'm used to having Perl handle the conversion of the path separator (except when it's a system call), I forgot about that caviot.
0
 
FishMongerCommented:
inq123 ,

BTW, it's nice to see ya back.  I missed our friendly bouts.  :)
0
 
nicholassolutionsCommented:
>>/cygdrive/c/marks/bii4

I'm not too familiar with cygwin (I keep meaning to download it but havent had time).

Could you possibly use regular expressions to strip out the 'wrong' path info? You should be able to if the possible errors are predictable (I'm not sure if 'cygdrive' is literally what is returned, or if that is just a variable you are using as an example). For example:

$path = system('pwd');
$path =~ s/cygdrive\/([a-z])/$1:/i;

Cheers,
Matt
0
 
mark_at_accAuthor Commented:
I think I found the solution...even with cygwin installed, running the DOS "cd" command by itself with no params returns $cwd nicely, with drive volume and backslashes...

I thought of doing the parse Matt, but thought there must be a better way.  First I would need to check if the path looked wrong, then change it, otherwise keep the original...I had to believe Windows could give up CWD pretty easily, even with cygwin installed.

Will assign points shortly, Thanks all!!
0
 
inq123Commented:
Hi, Fishmonger, nice of you to say that!  I'm glad to be back too.  I've been too busy for a while but glad to be less busy recently to pick up where I left last year.

I see that you're doing quite well in all areas especially perl.  Great job!  See you around.
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 3
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now