我有这个路径:C:\dev\app\tomcat\apache-tomcat-base
存储为批处理文件中的变量 copyFile
。
我正在使用以下代码尝试获取 apache-tomcat-base
(文件夹名称)作为新变量 copyfolderName
for /f "delims=" %%F in ("%copyFile%") do (
set copyfolderName=%%~nxF
)
但是 copyFolderName
最终为空。
注意:永远不会进入循环
取自这个片段:
:: Check if the file to be copied is a directory of file. If a directory define %isDirect%
IF exist "%copyFile%\" set isDirect=directory
:: Copy folder with all contents
IF defined isDirect (
::Get name of folder for the copyingDirectory folder
for /f "delims=" %%F in ("%copyFile%") do (
echo setting %%~nxF
set copyfolderName=%%~nxF
)
echo BASE NAME: %copyfolderName%
)
BASE NAME 什么都不打印
最佳答案
....
setlocal enabledelayedexpansion
echo BASE NAME: !copyfolderName!
endlocal
....
当 cmd 解析器读取一行或一行 block (括号内的代码)时,所有读取的变量都将替换为变量内的值,before 开始执行代码。如果 block 中代码的执行更改了变量的值,则从同一 block 内部看不到该值,因为对变量的读取操作不存在,因为它已被变量中的值替换。
要解决它,您需要启用延迟扩展,并在需要时将语法从 %var%
更改为 !var!
,向解析器表明读取操作需要延迟到命令执行。
关于windows - 从批处理文件中的路径获取文件夹名称。不解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25602399/