Re: Back-slashes & calling a batch file from perl ???
by $Bill Luebkert other posts by this author
Oct 28 2005 4:58PM messages near this date
view in the new Beta List Site
Re: Back-slashes & calling a batch file from perl ???
|
Re: Back-slashes & calling a batch file from perl ???
Michael D Schleif wrote:
> * $Bill Luebkert <dbecoll@[...].net> [2005:10:28:07:21:26-0700] scribed:
> > I ran it like this and it seems OK, but I don't have the same conditions:
>
> There's the rub ;>
>
> > use diagnostics;
> > use strict;
> > use warnings;
> >
> > my $prog = "E:/usr/ov/bin/nvhotbackup.bat";
> > my $dir = 'E:/backup';
> >
> > if (not -d $dir) {
> > mkdir $dir or die "mkdir $dir: $! ($^E)";
> > }
>
> I have cut-pasted your exact code. Please, recognize that my real code
> does use tests of this nature.
If your mkdir is failing in the Perl script, could there be a permissions
problem ? You're using /'s instead of \'s like the above right ?
> Also, please, notice the anomaly I tried to describe in my last post,
> regarding whether or not this directory actually gets created (see
> below.)
>
> > my $dest = timestamp ();
> > if (not -d "$dir/$dest") {
> > mkdir "$dir/$dest" or die "mkdir $dir/$dest: $! ($^E)";
> > }
> >
> > do_prog ($prog, $dir, $dest);
> >
> > exit 0;
> >
> > # Run system command & return exit code
> >
> > sub do_prog {
> > my ($prog, $dir, $dest) = @_;
> >
> > $dir =~ s!/!\\!g; # this one you definitely need
> > $prog =~ s!/!\\!g; # this may be optional
>
> This is _not_ required, since MS Windows 2003 Server _does_ follow
> forward slashes in cmd shell.
That's why I said it was optional. It works either way.
Actually mine works without either of them I believe.
> > my $cmd = qq{$prog "$dir" $dest};
> > print "CMD == ", $cmd, "\n";
> >
> > # my $null = "NUL";
> > # system "$cmd >$null 2>&1";
> >
> > system $cmd; # seems OK
>
> Again, I get the same results that I have always had at this point.
> Your code has not affected my results ;<
>
> > # my @res = `$cmd`; # also tried this OK
> > #print "res='@res'\n";
>
> The reason that this is *not* an option is, I need to use the exit codes
> from the call to batch file.
You still can get the return code from `` calls:
$CHILD_ERROR
$? The status returned by the last pipe close, backtick (``) command,
successful call to wait() or waitpid(), or from the system()
operator. This is just the 16-bit status word returned by the wait()
system call (or else is made up to look like it). Thus, the exit
value of the subprocess is really ("$? > > 8"), and "$? & 127" gives
which signal, if any, the process died from, and "$? & 128" reports
whether there was a core dump. (Mnemonic: similar to sh and ksh.)
> Please, understand: Whenever I use back-slashes -- however many, however
> quoted do far -- this directory does *NOT* get created! Nor does the
> Perl code die at the mkdir test ?!?!
Then don't use back slashes. I created the dir without them - look at
the mkdir's above.
> Here are my two (2) basic problems:
>
> [A] The called batch file will not accept a file path with
> forward-slashes; and
So reverse them just before the system call.
> [B] When I pass the directory string _with_ back-slashes, the mkdir :
I thought the dir was already made before passing the args to the bat file ?
> - does *NOT* create a directory;
The mkdir (in the Perl code) should have already created the dir and it
works fine with slashes, so use them there.
I'm not following you - be more explicit on where the mkdir is - Perl or bat ?
> - does *NOT* die nor croak any warning;
> - function is passed and do_prog() *IS* called;
> Of course, since the batch file concatenates $dir and $dest into a
> directory path, into which it tries to copy many files, the batch
> file *ALWAYS* fails, because there is *NO* directory into which
> those files can be copied.
If that's true, you should first concentrate on getting the mkdir in
the Perl script to work so it's there - before you deal with the bat file.
> Yes, I know that this is confusing; and I am quite befuddled ;<
>
> Here is information on my development workstation:
> System Information:
> OS Name MS Windows XP Professional
> Version 5.1.2600 SP 1 Build 2600
That's what I'm on.
> C:\>perl -v
>
> This is perl, v5.8.7 built for MSWin32-x86-multi-thread
> (with 7 registered patches, see perl -V for more detail)
I'm one behind you there.
> What do you think?
I think you're doin something wrong. ;)
_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@[...].com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs
Thread:
Michael D Schleif
Michael D Schleif
Chris Wagner
$Bill Luebkert
$Bill Luebkert
Michael D Schleif
$Bill Luebkert
Michael D Schleif
$Bill Luebkert
Michael D Schleif
$Bill Luebkert
James Sluka
Ted Zeng
$Bill Luebkert
Ted Zeng
Paul
Peter Eisengrein
Trevor Joerges
Jim Guion
$Bill Luebkert
James Sluka
$Bill Luebkert
Chris Wagner
|