batch file deal with Ampersand (&) in folder name

后端 未结 3 1428
野的像风
野的像风 2021-01-06 14:48

Batch file below:

@echo off
set filelocation=C:\\Users\\myself\\Documents\\This&That
cd %filelocation%
echo %filelocation%
pause

give

相关标签:
3条回答
  • 2021-01-06 14:56

    Unlike Jeb, I don't think you need delayed expansion to use the variable in a safe way. Proper quotation could suffice for most use:

    @echo off
    SETLOCAL EnableExtensions DisableDelayedExpansion
    set "filelocation=C:\Users\myself\Documents\This&That"
    cd "%filelocation%"
    echo "%filelocation%"
    rem more examples:
    dir /B "%filelocation%\*.doc"
    cd
    echo "%CD%"
    md "%filelocation%\sub&folder"
    set "otherlocation=%filelocation:&=!%" this gives expected result
    
    
    SETLOCAL EnableDelayedExpansion
    set "otherlocation=%filelocation:&=!%" this gives unexpected result
    ENDLOCAL
    pause
    

    Moreover, this is universal solution while delayed expansion could fail in case of ! exclamation mark in processed string (e.g. last set command above).

    0 讨论(0)
  • 2021-01-06 15:11

    You need two changes.

    1) The extended set syntax with quotes prefix the variable name and at the end of the content

    2) delayed expansion to use the variable in a safe way

    setlocal enableDelayedExpansion
    set "filelocation=C:\Users\myself\Documents\This&That"
    cd !filelocation!
    echo !filelocation!
    

    Delayed expansiuon works like percent expansion, but it have to be enabled first with setlocal EnableDelayedExpansion and then variables can expanded with exclamation marks !variable! and still with percents %variable%.

    The advantage of the delayed expansion of variables is that the expansion is always safe.
    But like the percent expansion, where you have to double percents when you need it as content, you have to escape exclamation marks with a caret when you use it as content.

    set "var1=This is a percent %%"
    set "var2=This is a percent ^!"
    
    0 讨论(0)
  • 2021-01-06 15:17

    Here are two ways:

    a. Quote the string; e.g:

    set "filelocation=C:\Users\myself\Documents\This&That"
    

    b. Use the escape character; e.g.:

    set filelocation=C:\Users\myself\Documents\This^&That
    

    To use that path with the cd command, enclose it in quotes.

    cd /d "%filelocation%"
    
    0 讨论(0)
提交回复
热议问题