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, luc...@us.ibm.com (512) 286-7313 or Tieline 363-7313 "Shahid" <sha...@acmet.com> 06/29/2009 07:23 AM Please respond to sha...@acmet.com To <staf-users@lists.sourceforge.net> 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 staf-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/staf-users
------------------------------------------------------------------------------
_______________________________________________ staf-users mailing list staf-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/staf-users