Batch file Ampersand似乎正在拆分我的变量批处理文件

Batch file Ampersand似乎正在拆分我的变量批处理文件,batch-file,cmd,Batch File,Cmd,我有下面的代码,它工作得很好 set "findest=\\CFFS\CF_Networked_Files\!!CLIENT DOCUMENTS\%PrimaryApplicantLast%, %PrimaryApplicantlFirst%" ..... @echo %DATE% %time:~0,-6% [%findest%] >> log.txt 当我运行相同的命令时,但由于%findest%稍长并且包含一个&symbol,它似乎将%findest%变量拆分为& 问题代码-

我有下面的代码,它工作得很好

set "findest=\\CFFS\CF_Networked_Files\!!CLIENT DOCUMENTS\%PrimaryApplicantLast%, %PrimaryApplicantlFirst%"
.....
@echo %DATE% %time:~0,-6% [%findest%] >> log.txt
当我运行相同的命令时,但由于%findest%稍长并且包含一个&symbol,它似乎将%findest%变量拆分为&

问题代码-

SET "findest=\\CFFS\CF_Networked_Files\!!CLIENT DOCUMENTS\%PrimaryApplicantLast%, %PrimaryApplicantlFirst% & %SecondaryApplicantLast%, %SecondaryApplicantFirst%"
....
@echo %DATE% %time:~0,-6% [%findest%] >> log.txt
我的代码中还有很多事情要做,但写入日志文件会引发错误,错误是%SecondaryAppliantLast%不是有效的命令,这让我相信我的代码已被拆分

错误-

Press any key to continue . . .
Wed 24/02/2016 13:21 [\\CFFS\CF_Networked_Files\!!CLIENT DOCUMENTS\EXAMPLE, test

'EXAMPLE2' is not recognized as an internal or external command,
operable program or batch file.
Press any key to continue . . .
干杯

编辑-

@echo
setlocal enableDelayedExpansion
echo.


echo. Client Folder Creator! 
echo.
echo. Follow the instructions to create appropriate client folders. 
echo --------------------------------------------------------------------------------

:choice
Set /P c=".Are there multiple applicants[Y/N]?"


:Primary
echo.
echo "Primary Applicant" 
echo.
set /P "PrimaryApplicantlFirst=Enter First Name: "
set /P "PrimaryApplicantLast=Enter Last Name: "
echo.

call :toUpper PrimaryApplicantLast


if /I "%c%" EQU "N" goto :CreateFolders
if /I "%c%" EQU "Y" goto :Secondary


:Secondary
echo "Secondary Applicant" 
echo.
set /P "SecondaryApplicantFirst=Enter First Name: "
set /P "SecondaryApplicantLast=Enter Last Name: "
echo.

call :toUpper SecondaryApplicantLast


goto :CreateFoldersMulti


:CreateFoldersMulti
SET "findest=\\CFFS\CF_Networked_Files\!!CLIENT DOCUMENTS\%PrimaryApplicantLast%, %PrimaryApplicantlFirst% ^& %SecondaryApplicantLast%, %SecondaryApplicantFirst%"
robocopy Z:\ProjectIT\BAT\test "%findest%" /e /NFL /NDL /NJH /NJS
SET blanknum=1
SET "finsubdest=-BLANK-%PrimaryApplicantLast% & %SecondaryApplicantLast%."

IF EXIST "%findest%\%blanknum%%finsubdest%" ( 
    SET /A blanknum=blanknum+1     
) 
IF EXIST "%findest%\%blanknum%%finsubdest%" ( 
    SET /A blanknum=blanknum+1     
) 
IF EXIST "%findest%\%blanknum%%finsubdest%" ( 
    SET /A blanknum=blanknum+1     
) 
IF EXIST "%findest%\%blanknum%%finsubdest%" ( 
    SET /A blanknum=blanknum+1     
) 

robocopy Z:\ProjectIT\BAT\Construction "%findest%\%blanknum%%finsubdest%" /e /NFL /NDL /NJH /NJS


echo Folder has been created for "%PrimaryApplicantLast% & %SecondaryApplicantLast%"
echo.
@echo "%findest%"
echo.


pause


@echo %DATE% %time:~0,-6% [%findest%] >> log.txt


%SystemRoot%\explorer.exe "%findest%"

pause

goto :eof


:CreateFolders
set "source=Z:\ProjectIT\BAT\test"
set "findest=\\CFFS\CF_Networked_Files\!!CLIENT DOCUMENTS\%PrimaryApplicantLast%, %PrimaryApplicantlFirst%"
robocopy "%source%" "%findest%" /e /NFL /NDL /NJH /NJS
SET blanknum=1
set finsubdest=-BLANK-%PrimaryApplicantLast%

IF EXIST "%findest%\%blanknum%%finsubdest%" ( 
    SET /A blanknum=blanknum+1     
) 
IF EXIST "%findest%\%blanknum%%finsubdest%" ( 
    SET /A blanknum=blanknum+1     
) 
IF EXIST "%findest%\%blanknum%%finsubdest%" ( 
    SET /A blanknum=blanknum+1     
) 
IF EXIST "%findest%\%blanknum%%finsubdest%" ( 
    SET /A blanknum=blanknum+1     
) 

robocopy Z:\ProjectIT\BAT\Construction "%findest%\%blanknum%%finsubdest%" /e /NFL /NDL /NJH /NJS


echo Folder has been created for "%PrimaryApplicantLast%"
echo.
echo %findest%
echo.


pause


@echo %DATE% %time:~0,-6% [%findest%] >> log.txt



%SystemRoot%\explorer.exe "%findest%"

goto :eof
:---------------------------------------------------------------------


:toUpper str -- converts lowercase character to uppercase
if not defined %~1 EXIT /b
for %%a in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I"
            "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R"
            "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z" "ä=Ä"
            "ö=Ö" "ü=Ü") do (
    call set %~1=%%%~1:%%~a%%
)
EXIT /b
在&前面加一个插入符号,这样:
^&

如果使用得当,插入符号将关闭以下字符的特殊含义(&is“concatenate commands”)


@ECHO关闭
SETLOCAL
设置“PrimaryAppliantLast=PAL”
当前位置非常仔细地检查下一组。它是直接从原始代码复制的。。。
设置“PrimaryAppliantlfirst=PAF”
设置“SecondaryAppliantLast=SAL”
设置“SecondaryApplicationFirst=SAF”
设置“findest=\\CFFS\CF\u网络文件\!!客户端文档\%PrimaryApplicationLast%,%PrimaryApplicationLFirst%^&%SecondaryApplicationLast%,%SecondaryApplicationFirst%”
集fi
@回显%DATE%%时间:~0,-6%[%findest%]
后藤:EOF
对我来说:

findest=\\CFFS\CF_Networked_Files\!!CLIENT DOCUMENTS\PAL, PAF ^& SAL, SAF
24/02/2016 13:45 [\\CFFS\CF_Networked_Files\!!CLIENT DOCUMENTS\PAL, PAF & SAL, SAF]

不幸的是,这产生了同样的错误。我将发布我的全部代码-可能错误在其他地方。可能如果您在
finsubdest
设置中重复该操作,也不会有任何问题。我的代码导致了其他奇怪的错误。它正在掉垃圾!!从…起客户端文档并将文件复制到新文件夹客户端文档中。也许是坏天气。明天我再看看!消失
表示您正在使用
delayedexpansion
运行。您可以使用
setlocal disabledelayedexpansion
禁用此功能。情况就是这样,谢谢!但仍然没有解决此问题(&T)。