批处理 - 从路径中删除包含星号的文件结尾

3

我需要一种方法从路径中移除文件扩展名,但如果文件扩展名包含星号(例如*.xsd),则我无法完成它。有什么好的想法吗?

示例批处理脚本:

SET xsd_path=xsd\file.xsd  REM This does work
SET xsd_path=xsd\*.xsd     REM This does not work

FOR %%i IN ( "%xsd_path%" ) DO ( set xsd_filepath=%%~pi )
ECHO "Filepath: %xsd_filepath%"

我很难理解这个问题。我无法让它不起作用。也许你的文件路径包含括号、&符号或其他破坏“for”循环的字符?尝试使用“for %%I in(“%xsd_path%”)do set“xsd_filepath=%%~pI””。如果你使用“set“variable=value””,你就可以避免这些问题。 - rojo
@rojo - 简单的FOR语句会尝试迭代所有与文件掩码匹配的文件,如果没有匹配的文件,则迭代次数为零。因此,如果没有文件,则失败,如果有很多文件,则效率低下。使用FOR / F可以解决这个问题。 - dbenham
1个回答

3

试试这个:

@echo off
SET "xsd_path=xsd\file.xsd"
SET "xsd_path=xsd\*.xsd"

FOR /f %%i IN ( "%xsd_path%" ) DO ( set "xsd_filepath=%%~dpi" )
ECHO "Filepath: %xsd_filepath%"
pause

请注意,我还在您的设置语句周围加上引号,这样尾随空格就不会添加到变量中。您还将xsd_filepath拼写错误,多了一个h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接