我有一个使用以下命令的Windows批处理文件
for /r %%i in (dir) do @echo %server%%%~pi>>%filename%
其中%server%是文件夹的网络位置(其他用户使用不同的驱动器映射),%filename%是我存储结果的文本文件(为调试目的这样做)。
文件中列出的文件夹最后会有一个尾部反斜杠,这似乎在读取文件时会引起一些问题。如何在不手动编辑创建的文件的情况下摆脱尾部反斜杠?
答案 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!
,因为始终启用和使用此功能是一种很好的做法,即使它不是必需的。