有没有办法用.bat / .cmd文件获取字符串的子串?
例如,给定字符串“hello.txt”有没有办法剥离.txt?
编辑:还有更通用的方法来做到这一点,而不是假设它是文件名或文件路径?
答案 0 :(得分:8)
如果这是作为参数传递的文件,您可以使用%~n1,如下所示:
test.bat
----------
echo %~n1 %~n2
c:\> test.bat myfile.txt my.long.file.bat
myfile my.long.file
如果您知道字符串的长度,则可以使用子字符串运算符:
echo %variable:0,4% => "test.txt" => "test"
除了最后4个字符之外的所有内容:
echo %variable:~0,-4% => "file...name.txt" => "file...name"
答案 1 :(得分:3)
.cmd文件中的常规子字符串语法(以及Win95上的.bat文件)是:
%variable:~num_chars_to_skip,num_chars_to_keep%
此页面提供了更多选项:VarSubstring
答案 2 :(得分:2)
对于子字符串和其他有趣的“变量替换”方法,您可以获得以下帮助:
设置/?
对于字符串解析(例如,在字符串中查找'。')尝试
for /?
答案 3 :(得分:1)
尝试使用help set
进行cmd.exe可用的字符串处理。
set的帮助包括你可以在'set'命令之外正常做的事情
您可以执行
之类的操作set source=hello.txt
REM print hello
echo %source:~0,-4%
REM print o.t
echo %source:~4,3%
REM print help.txt
echo %source:lo=p%
REM etc
echo %source:llo=%
上面的'代码'可能有些错误。我是从内存中写的,没有我附近的cmd.exe来测试。
答案 4 :(得分:1)
最好的办法就是安装python(或perl) 相信我,我几乎尝试了所有东西,在'DOS'(或其他任何东西)中进行文本操作只是头疼。
答案 5 :(得分:0)
对于任意字符串,我不这么认为。
对于这个例子,%~n1
将解析为没有扩展名的名称。
答案 6 :(得分:0)
您还可以查看调用文档(call /?)以获取基于文件和目录的特定子字符串信息。