title: Removing double quotes from variables in batch file creates problems with CMD environment
body: <p>Can anybody help with effective and safe way of removing quotes from batch variables?</p>
  <p>I have written a batch file which successfully imports a list of parameters %1, %2, %3 etc. and places them into named variables.  Some of these parameters contain multiple words, and therefor are enclosed in double quotes.</p>
  <pre><code>&gt; &quot;Susie Jo&quot; (%1)  
  &gt; &quot;Smith Barnes&quot; (%2)  
  &gt; &quot;123 E. Main St.&quot; (%3)  
  </code></pre>
  <p>These %variables are next placed in named variables:</p>
  <pre><code>&gt; set FirstName=%1  
  &gt; set LastName=%2  
  &gt; set ShipAddr=%3  
  </code></pre>
  <p>verification of variables is done by echo.
  &gt; echo.%FirstName%<br />
  &gt; echo.%LastName%<br />
  &gt; echo.%ShipAddr%</p>
  <p>results display as</p>
  <pre><code>&quot;Susie Jo&quot;  
  &quot;Smith Barnes&quot;  
  &quot;123 E. Main St.&quot;  
  </code></pre>
  <p>I need to eliminate the included quotes on selected variables.  For instance, FirstName and LastName are used elsewhere and must not include quotes.</p>
  <p>In a test batch file I was successful at eliminating quotes using the ~tilde character in variables.</p>
  <pre><code>&gt; set FirstName=%~1
  &gt; set LastName=%~2 
  </code></pre>
  <p>I thought I had the solution, but I soon experienced unusual behavior with execution of batch files.  Suddenly CMD is no recognizing long path statments.  Normal execution of batch file from full path</p>
  <pre><code>&gt; C:\Documents and Settings\Administrator\My Documents\Txt\batchtest\dataout.bat
  </code></pre>
  <p>returns</p>
  <pre><code>&gt; 'C:\Documents' is not recognized as an internal or external command....
  </code></pre>
  <p>So it would appear that the addition of the ~tilde character to the in-coming %1 %2...%n variables has caused some change.  Possibly some environment variables have been altered?</p>
  <p>I also tried clearing quotes from within variable with various attempts using the FOR command.  That seems awkward and I have been unable to learn how to accomplish this by creating a list of variable to perform the task:</p>
  <p>something like this:</p>
  <pre><code>for %%g in (%FirstName% %LastName%) do (
  set %%g=%%~g
  set %%h=%%~h
  set FirstName=%%~g
  set LastName=%%h
  echo.%FirstName% %LastName%
  )
  </code></pre>
  <p>I think I have two issues.</p>
  <ol>
  <li><p>My 'short and sweet' idea of inserting ~tilde in the incoming %1 %2 variables (%~1, etc) seems to have affected some settings and altered how CMD navigates long pathnames.</p>
  </li>
  <li><p>I'm still in search of a clean and easy way to eliminate quotes from selected named variables.</p>
  </li>
  </ol>
  <p>Any help for those more experienced would be most appreciated.  I'm at the end of my skills here... need some guidance please!</p>
  <p>edit 12/26/2009 13:36 PST
  entire batch file:</p>
  <pre><code>:: dataout.bat  
  :: revision 12/25/2009 add ~tilde to incoming %variables to eliminate embedded &quot;quotation marks.  
  :: writes address list using command line parameters  
  :: writes data output list for QBooks IIF import  
  :: writes Merchant Order data for RUI  
  :: sample command line string for testing  
  :: listmail[firstname][lastname][&quot;address string&quot;][&quot;city string&quot;][state][zip][Order#][PurchDate][Regname][&quot;FirstName LastName&quot;][TransactionID][PaymentMethod][Total][ProductID][Qty][Price_Each][PackPrep] [Shipping] [CommissionPmt] [Invoice#]  
  :: example: dataout Bellewinkle Moose &quot;123 Green Forest Way&quot; &quot;Vancouver&quot; WA 98664 1004968 05/25/2009 &quot;Bellewinkle Moose&quot; &quot;Olive Oyl&quot; 101738 &quot;On Account&quot; 20.67 FK-1P 1 8.95 3.00 1.39 239  
  @echo off  
  cls  
  c:  
  cd\  
  cd documents and settings\administrator\my documents\txt\batchtest  
  echo processing %1 %2  
  :VARISET  
  :: Convert %n command line parameters to string variables  
  set ($FirstName)=%~1  
  set ($LastName)=%~2  
  set ($BillingAddress1)=%~3  
  set ($BillingCity)=%~4  
  set ($BillingState)=%~5  
  set ($BillingPostal)=%~6  
  set ($OrderNumber)=%~7  
  set ($Purch_Date)=%~8  
  set ($RegistrationName)=%~9  
  shift  
  set ($TransactionID)=%~9  
  shift  
  set ($PaymentMethod)=%~9  
  shift  
  set ($Total)=%~9  
  shift
  set ($ProductIdentifier)=%~9  
  shift  
  set ($Quantity)=%~9  
  shift  
  set ($Price_Each)=%~9  
  shift  
  set ($Pack_Prep)=%~9  
  shift  
  set ($Shipping)=%~9  
  shift  
  set ($ServiceFee)=%~9  
  shift  
  set ($Discount)=%~9  
  shift  
  set ($Invoice)=%~9  
  shift  
  set ($UnitPrice)=%~9  
  set _ShipCombName=%($FirstName)% %($LastName)%  
  echo ship combo name is %_ShipCombName%  
  pause  
  :: write string varibables to logfile  
  echo FN %($FirstName)% LN %($LastName)% BA %($BillingAddress1)% %($BillingCity)% %($BillingState)% %($BillingPostal)% %($OrderNumber)% %($Purch_Date)% %($RegistrationName)% %($TransactionID)% %($PaymentMethod)% %($Total)% %($ProductIdentifier)% %($Quantity)% %($Price_Each)% %($Pack_Prep)% %($Shipping)% %($ServiceFee)% %($Discount)% %($Invoice)% %($UnitPrice)% %_ShipCombName% &gt;&gt; d_out_log.txt  
  :: Assign Account by Service Provider  
  IF /i %($PaymentMethod)%==Amazon Receivables SET _QBAcct=Amazon.com  
  :: 12-25-2009 added second Amazon pm't method for versatility  
  IF /i %($PaymentMethod)%==Amazon SET _QBAcct=Amazon.com  
  IF /i %($PaymentMethod)%==MAST SET _QBAcct=Auth/Net  
  IF /i %($PaymentMethod)%==MasterCard SET _QBAcct=Auth/Net  
  IF /i %($PaymentMethod)%==Visa SET _QBAcct=Auth/Net  
  IF /i %($PaymentMethod)%==PayPal SET _QBAcct=PayPalPmts  
  IF /i %($PaymentMethod)%==On Account SET _QBAcct=%($RegistrationName)%  
  IF /i %($PaymentMethod)%==Mail SET _QBAcct=%($RegistrationName)%  
  IF /i %($PaymentMethod)%==AMER SET _QBAcct=Auth/Net  
  IF /i %($PaymentMethod)%==DISC SET _QBAcct=Auth/Net  
  :: Assign Rep designator based on QBAccount  
  IF /i %($PaymentMethod)%==Amazon Receivables SET _Rep=Amazon  
  :: 12-25-2009 added second Amazon pm't method for versatility  
  IF /i %($PaymentMethod)%==Amazon SET _Rep=Amazon  
  IF /i %($PaymentMethod)%==MAST SET _Rep=BlueZap  
  IF /i %($PaymentMethod)%==MasterCard SET _Rep=BlueZap  
  IF /i %($PaymentMethod)%==Visa SET _Rep=BlueZap  
  IF /i %($PaymentMethod)%==PayPal SET _Rep=BlueZap  
  IF /i %($PaymentMethod)%==On Account SET _Rep=R B  
  IF /i %($PaymentMethod)%==Mail SET _Rep=R B  
  IF /i %($PaymentMethod)%==AMER SET _Rep=BlueZap  
  IF /i %($PaymentMethod)%==DISC SET _Rep=BlueZap  
  :: check for duplicate address data  
  findstr /i /s &quot;%_ShipCombName%&quot; addrlist.txt  
  echo errorlevel: %errorlevel%  
  if errorlevel 1 goto :ADDRWRITE  
  if errorlevel 0 goto :ADDRFOUND  
  :ADDRWRITE  
  echo %_ShipCombName% &gt;&gt; addrlist.txt  
  echo %($BillingAddress1)% &gt;&gt; addrlist.txt  
  echo %($BillingCity)% %($BillingState)% %($BillingPostal)% &gt;&gt; addrlist.txt  
  echo. &gt;&gt; addrlist.txt  
  echo Address File Written  
  :ADDRFOUND  
  echo selected rep is %_Rep%  
  echo selected account is: %_QBAcct%  
  pause  
  :: RUI OUT  
  :: write Merchant Order ID &amp; RUI Order ID to RUI  
  :: check for duplicate RUI data in writeRUI.txt  
  cd..  
  cd RegKOut  
  find /i &quot;%($OrderNumber)%&quot; writeRUI.txt  
  echo errorlevel: %errorlevel%  
  if errorlevel 1 goto :RUIWRITE  
  if errorlevel 0 goto :IIFWRITE  
  :RUIWRITE  
  echo %($Invoice)%   %($OrderNumber)% &gt;&gt; writeRUI.txt  
  :: end write RUI  
  :: IIF OUT  
  :IIFWRITE  
  :: Check for duplicate invoice data in writeIIF.txt  
  find /i &quot;%($OrderNumber)%&quot; writeIIF.txt  
  echo errorlevel: %errorlevel%  
  if errorlevel 1 goto :HEADWRITE  
  if errorlevel 0 goto :LINEWRITE  
  :HEADWRITE  
  :: write Header, Ship/Handling, discount, Rep &amp; commission data to QB IIF import file  
  echo %($OrderNumber)%   %($Purch_Date)% Invoice %($TransactionID)%  %_QBAcct%   Accounts Receivable             %($Total)%  %_Rep% &gt;&gt; writeIIF.txt    
  echo                        H/P %($Pack_Prep)%  1   ? &gt;&gt; writeIIF.txt  
  echo                        SHP %($Shipping)%   1   ? &gt;&gt; writeIIF.txt  
  echo                        DISC    %($Discount)%   1   ? &gt;&gt; writeIIF.txt  
  echo                        Comm    %($ServiceFee)% 1   ? &gt;&gt; writeIIF.txt  
  :LINEWRITE  
  IF /i %($ProductIdentifier)% equ PH-1 goto WRITE_DEFA ELSE goto WRITE_DISC  
  echo %($ProductIdentifier)%  
  :WRITE_DISC  
  ::writes discounted prices parsed from custom variable:  
  echo                        %($ProductIdentifier)%  %($Price_Each)% %($Quantity)%   ? &gt;&gt; writeIIF.txt  
  goto :EOF  
  :WRITE_DEFA  
  :writes default prices parsed from Product data  
  echo                        %($ProductIdentifier)%  %($UnitPrice)%  %($Quantity)%   ? &gt;&gt; writeIIF.txt  
  goto :EOF  
  :: 3-second delay  
  :: TYPE NUL | CHOICE.COM /N /CY /TY,3 &gt;NUL  
  :EOF  
  
  </code></pre>