为什么/ f拉起文件名?

时间:2016-08-14 04:03:10

标签: parsing batch-file for-loop filenames

我有一个名为 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函数有什么问题,它允许文件名直通。

2 个答案:

答案 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)

* /