如何在For命令中删除trailing \ from%~p?

时间:2015-01-26 18:00:25

标签: cmd batch-processing

我有一个使用以下命令的Windows批处理文件

for /r %%i in (dir) do @echo %server%%%~pi>>%filename%

其中%server%是文件夹的网络位置(其他用户使用不同的驱动器映射),%filename%是我存储结果的文本文件(为调试目的这样做)。

文件中列出的文件夹最后会有一个尾部反斜杠,这似乎在读取文件时会引起一些问题。如何在不手动编辑创建的文件的情况下摆脱尾部反斜杠?

2 个答案:

答案 0 :(得分:1)

更简单的解决方案是附加一个点并使用第二个FOR循环来获取规范化的路径,名称和扩展名:

for /r %%i in (dir) do for %%F in ("%%~pi.") do echo %server%%%~pnxF>>%filename%

一个很大的优点是不需要延迟扩展,所以当FOR变量扩展时,你不必担心!被破坏的路径。

答案 1 :(得分:0)

您可以将目录名称(带尾部反斜杠)分配给普通变量,然后使用子字符串变量扩展0,-1回显它以排除最终字符,所有这些都在for循环体的命令列表中:

for /r %%i in (dir) do @(set d=!server!%%~pi& echo !d:~0,-1!) >>!filename!

以下是来自help set的子字符串变量扩展的帮助:

  

也可以指定扩展的子字符串。

%PATH:~10,5%
     

会扩展PATH环境变量,然后只使用5   从展开的第11个(偏移10)字符开始的字符   结果。如果未指定长度,则默认为   变量值的其余部分。如果是数字(偏移或长度)   否定,则使用的数字是环境变量的长度   值添加到指定的偏移量或长度。

%PATH:~-10%
     

将提取PATH变量的最后10个字符。

%PATH:~0,-2%
     

将提取除PATH变量的最后2个字符之外的所有字符。

请注意,要使其正常工作,您必须启用enabledelayedexpansion并在for-loop正文中使用!分隔符作为变量,以确保它在展开期间展开循环处理,而不是在解析循环期间。我还将%filename%更改为!filename!,因为始终启用和使用此功能是一种很好的做法,即使它不是必需的。