windows - 从批处理文件中的路径获取文件夹名称。不解决

标签 windows batch-file directory dos

我有这个路径: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/

相关文章:

batch-file - 达到最大 setlocal 递归级别 - setlocal

windows - 批处理文件 - X 分钟后关闭计算机

php - 我可以将文件夹转换为 php 页面吗?

bash 根据内容删除目录

c++ - 在捕获鼠标但窗口未聚焦时捕获键盘事件 (Win32)

windows - 无法以管理员权限运行批处理代码

windows - 如何在命令中从 ntp 时间服务器同步 windows 时间

c# - 如何遍历目录并停止到排除特定字符的文件夹?

windows - 适用于 Windows 64 位的 LVITEM

windows - 设置自动(延迟启动)Windows 服务的时间间隔