STAF provides some Java APIs for you to use as documented in the STAF Java
User's Guide at http://staf.sourceforge.net/current/STAFJava.htm. One of
these is the wrapData() method in the STAFUtil class. You should use that
within a Java program to "wrap" option values that contain spaces (so that
the STAF command parser knows when an option value that contains spaces
begins and ends) instead having lots of escaped backslashes.
In addition, you need to understand that the Windows copy executable
requires that file paths containing spaces need to be enclosed in double
spaces so that it knows when a path begins and ends. So, the actual copy
command you want STAF to run will be something like:
copy "C:\Documents and Settings\All Users\Documents\*.*" "C:\Documents
and Settings\All Users\Documents\a\*.*"
Don't you want to use the "xcopy" command instead of the "copy" command?
Anyway, just be sure that the copy command you are really submitting is a
valid command (e.g. that it works when run via a command prompt without
STAF).
And you will probably find it useful to use the RETURNSTDOUT and
RETURNSTDERR options on the STAF PROCESS START request to return the
command's stdout/stderr which may provide additional information when the
command fails.
Also, it is helpful to print out the actual STAF PROCESS START request
that you submitted if it fails to see if you constructed the PROCESS START
request incorrectly.
Also, you may want to use the STAF file separator variable
{STAF/Config/Sep/File} instead of specifying "\\".
Here's some updated Java code for you to try:
public boolean bCopy(String astrSourcePath, String astrDesPath)
{
// Create a STAFHandle object used to submit STAF service requests
STAFHandle lObjectOfSTAFHandle;
// Create a STAFResult object to hold result from STAF command
STAFResult lObjectOfSTAFResult;
try
{
// Create a STAF handle
lObjectOfSTAFHandle = new STAFHandle("CopyFiles");
// Create the DOS copy command for copying files
String sourceFiles = "\"" + astrSourcePath +
"{STAF/Config/Sep/File}*.*\"";
String desFiles = "\"" + astrDesPath +
"{STAF/Config/Sep/File}*.*\"";
String command = "copy " + sourceFiles + " " + desFiles;
String request = "START SHELL COMMAND " +
STAFUtil.wrapData(command) +
" RETURNSTDOUT RETURNSTDERR SAMECONSOLE WAIT";
// Submit a STAF PROCESS START comamnd to copy files
lObjectOfSTAFResult = lObjectOfSTAFHandle.submit2(
"local", "PROCESS", request);
if (lObjectOfSTAFResult.rc == 0)
{
// Copy command worked
return true;
}
else
{
// Copy command failed
// Print additional error information provided by the
// DOS copy command in stdout/sdterr (which is returned
// in the result
System.out.println(
"STAF local PROCESS " + request +
" failed with RC=" + lObjectOfSTAFResult.rc +
", Result=" + lObjectOfSTAFResult.result);
return false;
}
}
catch (STAFException aobjSTAFException)
{
// Print the exception on console
aobjSTAFException.printStackTrace();
return false;
}
}
--------------------------------------------------------------
Sharon Lucas
IBM Austin, [email protected]
(512) 286-7313 or Tieline 363-7313
"Shahid" <[email protected]>
06/29/2009 07:23 AM
Please respond to
[email protected]
To
<[email protected]>
cc
Subject
[staf-users] How to use DOS copy command through STAF if spaces are exists
in the path?
I have written following code in java for using the DOS copy command
through
STAF for copying files:
public boolean bCopy(String astrSourcePath, String astrDesPath)
{
astrSourcePath = astrSourcePath.replace("\\", "\\\\");
astrDesPath = astrDesPath.replace("\\", "\\\\");
//Creating object of STAFHandle
STAFHandle lObjectOfSTAFHandle;
//It is used to create an object of STAFResult which hold output of
STAF command
STAFResult lObjectOfSTAFResult;
try
{
//Creating STAF handle
lObjectOfSTAFHandle = new STAFHandle("CopyFiles");
//Executing the DOS command for copying files
lObjectOfSTAFResult = lObjectOfSTAFHandle.submit2("LOCAL",
"PROCESS", " START Shell COMMAND COPY PARMS \""+
astrSourcePath+"\\\\*.*\" \""+ astrDesPath+"\\\\*.*\" wait
SAMECONSOLE");
//If files are copied successfully
if(lObjectOfSTAFResult.rc == 0)
{
//returning the status of copying files as true
return true;
}
//If files are not copied
else
{
//returning the status of copying files as false
return false;
}
}
catch (STAFException aobjSTAFException)
{
//Printing the exception on consol
aobjSTAFException.printStackTrace();
//returning the status of copying files as false
return false;
}
}
Above method are working fine, if spaces are not exists in the source path
and destination path.
Above method are not working in case of spaces exists in the source path
of
destination path.
However after running following STAF command through command prompt, files
are copied in case spaces are exits in source path of destination path:
<Snip>
C:\>STAF LOCAL PROCESS START SHELL COMMAND COPY PARMS \""C:\Documents and
Settings\All Users\Documents\*.*"" \""C:\Documents and Settings\All
Users\Documents\a\
*.*"" wait sameconsole
Response
--------
{
Return Code: 0
Key : <None>
Files : []
}
C:\>
<End>
I have modified the java code with the following code:
public boolean bCopy(String astrSourcePath, String astrDesPath)
{
astrSourcePath = astrSourcePath.replace("\\", "\\\\");
astrDesPath = astrDesPath.replace("\\", "\\\\");
//Creating object of STAFHandle
STAFHandle lObjectOfSTAFHandle;
//It is used to create an object of STAFResult which hold output of
STAF command
STAFResult lObjectOfSTAFResult;
try
{
//Creating STAF handle
lObjectOfSTAFHandle = new STAFHandle("CopyFiles");
//Executing the DOS command for copying files
lObjectOfSTAFResult = lObjectOfSTAFHandle.submit2("LOCAL",
"PROCESS", " START Shell COMMAND COPY PARMS \\\"\""+
astrSourcePath+"\\\\*.*\"\" \\\"\""+ astrDesPath+"\\\\*.*\"\"
wait
SAMECONSOLE");
//If files are copied successfully
if(lObjectOfSTAFResult.rc == 0)
{
//returning the status of copying files as true
return true;
}
//If files are not copied
else
{
//returning the status of copying files as false
return false;
}
}
catch (STAFException aobjSTAFException)
{
//Printing the exception on consol
aobjSTAFException.printStackTrace();
//returning the status of copying files as false
return false;
}
}
But still it is not working.
Can anyone tell me what is the problem in the code?
------------------------------------------------------------------------------
_______________________________________________
staf-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/staf-users
------------------------------------------------------------------------------
_______________________________________________
staf-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/staf-users