ms-dos variable @path doesn't include & symbol of path - workarounds?

Posted on 2008-10-17
Medium Priority
Last Modified: 2012-05-05
On any folders that have an & character in the folder name, the above (or below?) command seems to stop reading the name at that symbol.  For example, I have a folder called "A & A businees, inc."  When I run the forfiles command, the resultant command only shows "md c:\test\A " instead of md "c:\test\"A & A businees, inc."\TY08\Tax Returns"
It drops the & symbol and the rest of the name.  Ideas on how to overcome this?  I included the slashes so that I could get it to make folders with a space in the name - however, I'm not getting any folders with & in the name now.

Here's the catch:  If I run the second command included, the resultant command has the path correct (but isn't creating the directory as I wanted with a space.  I had to include the underscore.
1. forfiles /p c:\test /c "cmd /c if @isdir==TRUE md \"@path\TY08\Tax Returns\""
2. forfiles /p p:\ /c "cmd /c if @isdir==TRUE echo md @path\TY08\Tax_returns" > c:\fileorig.txt

Open in new window

Question by:bruderbell
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
LVL 38

Accepted Solution

Shift-3 earned 1600 total points
ID: 22744820
This may work better using the FOR command instead of FORFILES.

Paste the script below into a text file with a .cmd extension.  Running it will create the subfolders.

If you are going to run this from the command prompt rather than from a batch script, replace each instance of %%G with %G.

@echo off
set folder=c:\test
for /F "tokens=*" %%G in ('dir "%folder%" /A:D /B') do md "%folder%\%%G\TY\Tax Returns"

Open in new window

LVL 96

Expert Comment

by:Lee W, MVP
ID: 22746009
If shift-3's comment doesn't work, it may be because & is used to join two commands on one command line.  For example:
C:\Temp\scripts>@echo firstline & @echo secondline

if you were not putting the & in a variable, you could probably escape it using ^ - for example,
C:\Temp\scripts>@echo firstline ^& @echo secondline
firstline & @echo secondline

Given this behavior and the possibility for problems, I would suggest your best solution is to search and replace every ampersand with the word "and"

For example, instead of using 'dir "%folder%" /A:D /B', make it two separate commands and do some editing:
Command 1:
dir "%folder%" /A:D /B>folderlist.txt

Then using notepad, do a quick search and replace, then run an if command similar to the one suggested above:
for /F "tokens=*" %%G in (folderlist.txt) do md "%folder%\%%G\TY\Tax Returns"

LVL 96

Expert Comment

by:Lee W, MVP
ID: 22746029
You can probably also get around this using the for command alone:

@echo off
set folder=c:\test
for /F "tokens=1* delims=&" %%G in ('dir "%folder%" /A:D /B') do (
   If "%%H"=="" (
      md "%folder%\%%G\TY\Tax Returns"
   ) Else (
      md "%folder%\%%G ^& %%H\TY\Tax Returns"
      REM The next line replaces the & with the word and in the folder name but is commented out at the moment.
      REM md "%folder%\%%G and %%H\TY\Tax Returns"
Get your Conversational Ransomware Defense e‑book

This e-book gives you an insight into the ransomware threat and reviews the fundamentals of top-notch ransomware preparedness and recovery. To help you protect yourself and your organization. The initial infection may be inevitable, so the best protection is to be fully prepared.

LVL 96

Expert Comment

by:Lee W, MVP
ID: 22746064
And as I think about it and re-read the question, you cannot replace the & without renaming existing folders... so scratch that.  There's another way you can probably get around this:

@echo off
set folder=c:\test
Rem create sub folders for all clients with ampersands in their folder names
for /F "tokens=1* delims=&" %%G in ('dir "%folder%" /A:D /B ^| Find /i "&"') do md "%folder%\%%G ^& %%H\TY\Tax Returns"
Rem create sub folders for all clients without ampersands in their folder names
for /f "tokens=*" %%G in ('dir %folder% /ad /b ^| Find /i /v "&"') do md "%folder%\%%G\TY\Tax Returns"

Open in new window

LVL 38

Expert Comment

ID: 22746268
Is there some problem with my method?
LVL 21

Assisted Solution

AmazingTech earned 400 total points
ID: 22753815
Here give this a go.

If you're running it from the command line then use this:
forfiles /p c:\test /c "cmd /c if @isdir==TRUE for %a in (@path) do md \"%~a\TY08\Tax Returns\""

forfiles /p c:\test /c "cmd /c if @isdir==TRUE for %%a in (@path) do md \"%%~a\TY08\Tax Returns\""

Open in new window


Author Closing Comment

ID: 31507886
Both of your solutions fix the problem, apparently through the use of different variables than those that are available simply in the /c cmd format.  Thanks!

Featured Post

Free Backup Tool for VMware and Hyper-V

Restore full virtual machine or individual guest files from 19 common file systems directly from the backup file. Schedule VM backups with PowerShell scripts. Set desired time, lean back and let the script to notify you via email upon completion.  

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Using dates in 'DOS' batch files has always been tricky as it has no built in ways of extracting date information.  There are many tricks using string manipulation to pull out parts of the %date% variable or output of the date /t command but these r…
Introduction: Recently, I got a requirement to zip all files individually with batch file script in Windows OS. I don't know much about scripting, but I searched Google and found a lot of examples and websites to complete my task. Finally, I was ab…
Add bar graphs to Access queries using Unicode block characters. Graphs appear on every record in the color you want. Give life to numbers. Hopes this gives you ideas on visualizing your data in new ways ~ Create a calculated field in a query: …
In this video, Percona Director of Solution Engineering Jon Tobin discusses the function and features of Percona Server for MongoDB. How Percona can help Percona can help you determine if Percona Server for MongoDB is the right solution for …
Suggested Courses

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question