我有一个名为 paths.txt的文本文件它包含以下数据,
LocalName RemotePath
N:\ DANIEL-HP \ Users \ Public
Z:\ DANIEL-HP \ Users \ Public \ Favorites
LocalName RemotePath
N:\ DANIEL-HP \ Users \ Public
Z:\ DANIEL-HP \ Users \ Public \ Favorites
我正在运行以下批处理文件以提取所需的信息路径字母路径。
@echo off
for /f "tokens=1 delims=" %%a in ('find ":" paths.txt') do (
echo %%a
)
pause
结果
---------- PATHS.TXT
N: \\DANIEL-HP\Users\Public
Z: \\DANIEL-HP\Users\Public\Favorites
N: \\DANIEL-HP\Users\Public
Z: \\DANIEL-HP\Users\Public\Favorites
Press any key to continue . . .
我解决这个问题的方法是修改 FOR ,如下所示
for /f "skip=2 tokens=1 delims=" %%a in ('find ":" paths.txt') do (echo %%a)
我得到一个干净的所需输出,
N: \\DANIEL-HP\Users\Public
Z: \\DANIEL-HP\Users\Public\Favorites
N: \\DANIEL-HP\Users\Public
Z: \\DANIEL-HP\Users\Public\Favorites
Press any key to continue . . .
问题是,我的第一个FOR函数有什么问题,它允许文件名直通。
答案 0 :(得分:3)
问题是你的FIND命令,而不是你的FOR / F.
FIND总是打印出文件的名称,如果它打开文件本身(如果文件名作为参数传入)。
您可以使用重定向来避免文件名:
find ":" <paths.txt
或管道:
type paths.txt | find ":"
要在FOR循环中使用它们,必须转义管道或重定向。
for /f "tokens=1 delims=" %%a in ('find ":" ^< paths.txt') do echo %%a
for /f "tokens=1 delims=" %%a in ('type paths.txt ^| find ":"') do echo %%a
另一种方法是使用FINDSTR(但仅当文件是ASCII时):
findstr ":" paths.txt
如果文件是unicode(UTF-16),那么您可以通过管道TYPE命令的输出将内容转换为ASCII(再次,如果在FOR / F中使用,则转义管道):
type paths.txt | findstr ":"
答案 1 :(得分:1)
需要删除;))
/ * 我建议:
find ":" ^<paths.txt
type paths.txt ^| find ":"
findstr工作得很好..我不明白你有什么空白
@echo off
set "tmp=PATHS.TXT"----your value
echo,---findstr
for /f "tokens=1 delims=" %%a in ('findstr ":" %tmp%') do (echo %%a)
echo,---type
for /f "tokens=1 delims=" %%a in ('type %tmp% ^| find ":"') do (echo %%a)
echo,---redirect
for /f "tokens=1 delims=" %%a in ('find ":" ^<%tmp%') do (echo %%a)
* /