如何在dos的某个char之前删除字符串?

时间:2012-07-11 13:23:11

标签: string batch-file dos

假设我有文件名text.txt并包含几行。每行以dayname开头,以“/”字符结束,然后添加路径。另一方面,我只需要文件名,而不是路径。因此,我需要一些东西来转换文件:

mon/C:\stt\test_file.abc
sat/C:\Documents and Settings\alguri\Desktop\test_file2.txt
fri/C:\sat\new_folder2\file3.jpg

mon/test_file.abc
sat/test_file2.txt
fri/file3.jpg

我在dos命令中需要这段代码。我尝试了一些代码但不能以不同的方式解析字符串。因为路径名可以有多个“\”字符。

如果我知道一行中只有两个“\”字符。我可以这样做:

for /f "tokens=1,4 delims=/\" %%a in (text.txt) do (
echo %%a
    )

这将只为第1行“test_file.abc”提供正确答案 但是所有其他行都有不同数量的“\”字符。您认为我怎么能处理这个?

我脑海中的一个解决方案是计算“\”的数量,并设置令牌第二个参数来决定我需要哪个部分。但我能做到这一点。除了令牌,我可能没有动态设置值。

1 个答案:

答案 0 :(得分:3)

您可以使用参数修饰符。

for /f "tokens=1,* delims=/" %%A in (test.txt) do (
    echo %%A/%%~nxB
)

有关修饰符的更多信息,请阅读What does %~dp0 mean, and how does it work?