Batch file 是否可以使用&;传递变量;作为批处理文件中的参数

Batch file 是否可以使用&;传递变量;作为批处理文件中的参数,batch-file,Batch File,我想将&作为参数传入一个值。在下面的示例代码中,我可以成功地回显文件名,但如何将其作为参数传递给:TEE标签 @ECHO OFF CLS SETLOCAL ENABLEDELAYEDEXPANSION SET FILE_PATH=C:\TEMP\FILE^&NAME.TXT REM THIS WORKS ECHO !FILE_PATH! REM THIS DOES NOT WORK CALL :TEE !FILE_PATH! GOTO :EOF :TEE FOR /F "TOK

我想将&作为参数传入一个值。在下面的示例代码中,我可以成功地回显文件名,但如何将其作为参数传递给:TEE标签

@ECHO OFF
CLS
SETLOCAL ENABLEDELAYEDEXPANSION

SET FILE_PATH=C:\TEMP\FILE^&NAME.TXT

REM THIS WORKS
ECHO !FILE_PATH!

REM THIS DOES NOT WORK
CALL :TEE !FILE_PATH!

GOTO :EOF

:TEE
FOR /F "TOKENS=*" %%Z IN ("%*") DO (
ECHO %%Z
     >  CON ECHO.%%Z
     >> "!LOG_FILE!" ECHO.%%Z
     GOTO :EOF
)
GOTO :EOF
@ECHO关闭
CLS
SETLOCAL ENABLEDELAYEDEXPANSION
设置文件路径=C:\TEMP\FILE^&NAME.TXT
雷姆:这样行吗
回声!文件路径!
雷姆:这不管用
调用:TEE“%FILE\u PATH%”
后藤:EOF
:发球台
对于('%*')DO中的/F“TOKENS=*USEBACKQ”%%%Z(
回声%%~Z
>CON ECHO.%%~Z
>>“!日志文件!”回显。%%~Z
后藤:EOF
)
后藤:EOF
是的,它是-这里有一个方法

@ECHO OFF
CLS
SETLOCAL ENABLEDELAYEDEXPANSION
设置文件路径=C:\TEMP\FILE^&NAME.TXT
雷姆:这样行吗
回声!文件路径!
雷姆:这不管用
调用:TEE“%FILE\u PATH%”
后藤:EOF
:发球台
对于('%*')DO中的/F“TOKENS=*USEBACKQ”%%%Z(
回声%%~Z
>CON ECHO.%%~Z
>>“!日志文件!”回显。%%~Z
后藤:EOF
)
后藤:EOF
是的,它是-这里有一个方法

@ECHO OFF
CLS
SETLOCAL ENABLEDELAYEDEXPANSION
设置文件路径=C:\TEMP\FILE^&NAME.TXT
雷姆:这样行吗
回声!文件路径!
雷姆:这不管用
调用:TEE“%FILE\u PATH%”
后藤:EOF
:发球台
对于('%*')DO中的/F“TOKENS=*USEBACKQ”%%%Z(
回声%%~Z
>CON ECHO.%%~Z
>>“!日志文件!”回显。%%~Z
后藤:EOF
)
后藤:EOF
是的,它是-这里有一个方法

@ECHO OFF
CLS
SETLOCAL ENABLEDELAYEDEXPANSION
设置文件路径=C:\TEMP\FILE^&NAME.TXT
雷姆:这样行吗
回声!文件路径!
雷姆:这不管用
调用:TEE“%FILE\u PATH%”
后藤:EOF
:发球台
对于('%*')DO中的/F“TOKENS=*USEBACKQ”%%%Z(
回声%%~Z
>CON ECHO.%%~Z
>>“!日志文件!”回显。%%~Z
后藤:EOF
)
后藤:EOF

是的,它是-这里有一种方法

效果很好,但是它要求我总是将所有参数引用到:TEE。我发现,如果我将for循环更改如下:
for/F“TOKENS=*USEBACKQ”%%%Z IN('%*')DO(…)
,那么我可以将值传递给:TEE,而不使用引号,还可以引用问题值。然而,当我引用问题参数值时,我会在引用的回显文本中保留引号。是否有某种方法可以逻辑地剥离前导和尾随“在:TEE?中引用的参数中,您提出的备选方案有效,但会给我带来其他嵌入引号的问题。最好的解决方案是您的原始代码示例,我在您的答案中对其进行了调整。这很有效,但是它要求我始终将所有参数引用到:TEE。我发现,如果我将for循环更改如下:
for/F“TOKENS=*USEBACKQ”%%%Z IN('%*')DO(…)
,那么我可以将值传递给:TEE,而不使用引号,还可以引用问题值。然而,当我引用问题参数值时,我会在引用的回显文本中保留引号。是否有某种方法可以逻辑地剥离前导和尾随“在:TEE?中引用的参数中,您提出的备选方案有效,但会给我带来其他嵌入引号的问题。最好的解决方案是您的原始代码示例,我在您的答案中对其进行了调整。这很有效,但是它要求我始终将所有参数引用到:TEE。我发现,如果我将for循环更改如下:
for/F“TOKENS=*USEBACKQ”%%%Z IN('%*')DO(…)
,那么我可以将值传递给:TEE,而不使用引号,还可以引用问题值。然而,当我引用问题参数值时,我会在引用的回显文本中保留引号。是否有某种方法可以逻辑地剥离前导和尾随“在:TEE?中引用的参数中,您提出的备选方案有效,但会给我带来其他嵌入引号的问题。最好的解决方案是您的原始代码示例,我在您的答案中对其进行了调整。这很有效,但是它要求我始终将所有参数引用到:TEE。我发现,如果我将for循环更改如下:
for/F“TOKENS=*USEBACKQ”%%%Z IN('%*')DO(…)
,那么我可以将值传递给:TEE,而不使用引号,还可以引用问题值。然而,当我引用问题参数值时,我会在引用的回显文本中保留引号。是否有某种方法可以从逻辑上去除:TEE中引用参数中的“前导”和“尾随”?您提出的备选方案很有效,但在嵌入引号时会给我带来其他问题。最好的解决方案是您的原始代码示例,我在您的回答中对其进行了调整。。