Windows IT Pro is the authoritative and independent resource for windows nt, windows 2000, windows 2003, windows xp. Features a collection of resources and magazines for windows IT professionals.
  
  
  Advanced Search 


January 17, 2006

Handling Spaces in Command Paths


RSS
Subscribe to Windows IT Pro | See More Task Automation Articles Here | Reprints | Or get the Monthly Online Pass—only $5.95 a month!
Main Article    Keep Tabs on Replications

Download the Code Here

Dealing with spaces in command paths can be a hassle. We've all had the experience of sending a script to a colleague at another site and having the script fail because of spaces in paths to input files, output files, commands, or even the script itself. Even if you've tenaciously eliminated path spaces in your script environment, someone who deploys a script at another location might reintroduce spaces in the paths. The optimal solution is to code your scripts so that they aren't affected by the addition of path spaces. If you spend a few minutes to do this at the script-development stage, then test the script by introducing spaces in the debugging stage, you'll be rewarded with a more stable script that can work anywhere and won't require changes to "fix it" to work with spaces.

Problems with spaces in the paths to input or output files are fairly easy to solve. For input files, you can use the For command with the usebackq option to handle input files, as this example shows:

For /F "usebackq tokens=*" 
  %%i in ("d:\input file.txt") Do Echo %%i 

For output files, you can surround the file path with double quotes to handle spaces, like this:

Echo Output>>"D:\output file.txt" 

Dealing with spaces in command paths is a bit more difficult. Often commands such as Diruse that work fine outside a For command can fail when embedded within a For command. For example, this command will execute successfully:

"C:\Resource Kit\Diruse.exe"
  "\\ServerA\Share123" 

But this similar command will fail:

For /F tokens=*" %%i in 
  ('"C:\Resource Kit\ Diruse.exe"
  "\\ServerA\Share123"')
  Do Echo %%i 

Double-quoting the path to the command and to the target path inside a For command has caused the failure.

Because we want to make our scripts transferable, we need to assume that the commands they contain might end up with a space in the path and thus make them goof-proof, so that they'll succeed no matter who deploys them or where they're deployed. One way to address this problem is to switch the command paths to an ISO 9660 8.3 filenaming format. The following code performs the 8.3 conversion:

Set DirusePath= 
  C:\Resource Kit\Diruse.exe 
  
For /F "tokens=*" %%i in 
  ("%DirusePath%") 
  Do Set DirusePath=%% ~dpnxsi
  
For /F "tokens=*" %%i in 
  ('%DirusePath%
  "\\ServerA\Share123"')
  Do Echo %%i 

After the utility path is converted to an 8.3 format, you can use it in a script without worrying about spaces in the path. The path will return correct results when used inside a For command.

Path-space problems can also occur when you've coded your script to self-locate. Self-locating basically means you use the %0 environment variable to determine the directory that your script resides in. This technique is commonly used to look for input files or to create output files in the same path where the script resides without needing to specify that path in the variables you set at the beginning of the script.

If your script resides in a path that has spaces, you can use either the input and output file methods I described earlier or the %~dpnxsi variable approach, which Listing A shows, to fix path-space problems in self-locating code.

Another potential gotcha when dealing with spaces is the possibility that a script user will encapsulate the path used in a Set command in double quotes when you've coded the script to work without double quotes. In this case, adding double quotes can result in duplicate double quotes and a script failure. In ReplicationTest, I coded around this problem by using a string substitution to strip off the double quotes, which Listing B shows, then coded them back in later in the script. This technique ensures that the script works correctly regardless of whether the user enters the pathname in double quotes.

End of Article



Reader Comments

You must log on before posting a comment.

If you don't have a username & password, please register now.




Top Viewed ArticlesView all articles
Accessing Database Data with ADO

...

The Memory-Optimization Hoax

Don't believe the hype. At best, RAM optimizers have no effect. At worst, they seriously degrade performance. ...

Friday at PASS Europe 2006

Kevin talks about the closing day of the event and shares a funny Microsoft film. ...


Task Automation Whitepapers Essential Guide to E-discovery and Recovery for Microsoft Exchange

Continuous Data Protection and Recovery for Microsoft Exchange

Protecting (You and) Your Data with Exchange Server 2007

Related Events Check out our list of Free Email Newsletters!

Task Automation eBooks Spam Fighting and Email Security for the 21st Century

A Guide to Windows Certification and Public Keys

Keeping Your Business Safe from Attack: Patch Management

Related Task Automation Resources Become a VIP member of the Windows IT Pro community!
Get it all with the VIP CD and VIP access. A $500+ value for only $279!

Subscribe to Windows IT Pro!
Solve your toughest technical problems with our experts and access 10,000 + articles online. 30% off

Monthly Online Pass - Only $5.95!
Get instant access to 10,000+ articles from Windows IT Pro Magazine!

TechNet Virtual Labs
Evaluate and test Microsoft's newest products.

Job Openings in IT


ADS BY GOOGLE SPONSORED LINKS FEATURED LINKS

Maximize your SharePoint Investment – 8 Cities
Discover best practices and tips for both architecting and administering SharePoint. Early Bird Price of $99 through Sept 15th.

Find a new job now on the all new IT Job Hound!
Search jobs, post your resume, and set up job e-mail alerts!

Master SharePoint with 3 eLearning Seminars
Learn how to build a better SharePoint infrastructure and enable powerful collaboration with MVPs Dan Holme and Michael Noel. Register today!

Top Tools for Virtualization Disaster Recovery & Replication
View this web seminar on August 14th to learn about two tools that will result in faster backup and restore with P2V disaster recovery.

SharePointConnections Conference Fall 2008
Don’t miss the premier event for Microsoft IT Professionals in Las Vegas, November 10-13. Register and book your room by August 25 and receive a FREE room night (based on a three night minimum stay).

VMworld 2008 - Sign Up Today!
Join your peers on September 15-18 at The Venetian Hotel in Las Vegas as VMware hosts VMworld 2008, the leading Virtualization event.



Increase Application Performance
Free White Paper by Editor's Best winner, Texas Memory Systems.

Microsoft® Tech•Ed EMEA 2008 IT Professionals
Advance your thinking with new ideas and practical real-world solutions at Microsoft’s FIVE day technical infrastructure conference 3-7 Nov., 2008. Register before 26 September 2008 to save €300.

Order Your SQL Fundamentals CD Today!
Learn how to use SQL Server, understand Office integration techniques and dive into the essentials of SQL Express and Visual Basic with this free SQL Fundamentals CD.

Are You Really Compliant with Software Regulations?
View this web seminar that will help you with compliance best practices and check out a management solution to assure that you won’t be in jeopardy of an audit.

Virtualization Congress Oct. 14-16 in London
Don't miss Virtualization Congress, the premiere EMEA conference dedicated to hardware, OS and application virtualization. Oct. 14-16.
Windows IT Pro Home Register FAQ for Windows WinInfo News
Europe Edition About Us Contact Us/Customer Service Media Kit Affiliates / Licensing  
SQL Server Magazine Office & SharePoint Pro Windows Dev Pro IT Job Hound ITTV
IT Library Technical Resources Directory Connected Home Windows Excavator Windows SuperSite 
 
 Windows IT Pro is a Division of Penton Media Inc.
 Copyright © 2008 Penton Media, Inc., All rights reserved. Terms and Use | Privacy Statement | Reprints and Licensing