Parsing 为什么for/f会调出文件名?
我有一个名为path.txt的文本文件,它包含以下数据 LocalName远程路径Parsing 为什么for/f会调出文件名?,parsing,batch-file,for-loop,filenames,Parsing,Batch File,For Loop,Filenames,我有一个名为path.txt的文本文件,它包含以下数据 LocalName远程路径 N:\DANIEL-HP\Users\Public Z:\DANIEL-HP\Users\Public\Favorites LocalName远程路径 N:\DANIEL-HP\Users\Public Z:\DANIEL-HP\Users\Public\Favorites 我正在运行以下批处理文件以提取所需的信息路径字母path @echo off for /f "tokens=1 delims=" %%a i
N:\DANIEL-HP\Users\Public
Z:\DANIEL-HP\Users\Public\Favorites
LocalName远程路径
N:\DANIEL-HP\Users\Public
Z:\DANIEL-HP\Users\Public\Favorites 我正在运行以下批处理文件以提取所需的信息路径字母path
@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 /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函数允许文件名传递有什么问题。问题在于FIND命令,而不是FOR/F “查找”总是打印文件名,就像打开文件本身一样(如果文件名作为参数传入) 您可以使用重定向来避免文件名:
find ":" <paths.txt
要在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
如果文件为unicode(UTF-16),则可以通过管道化TYPE命令的输出将内容转换为ASCII(如果在FOR/F中使用,请再次转义管道):
问题在于FIND命令,而不是FOR/F “查找”总是打印文件名,就像打开文件本身一样(如果文件名作为参数传入) 您可以使用重定向来避免文件名:
find ":" <paths.txt
要在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
如果文件为unicode(UTF-16),则可以通过管道化TYPE命令的输出将内容转换为ASCII(如果在FOR/F中使用,请再次转义管道):
需要删除;))
/*
我忠告:
find ":" ^<paths.txt
type paths.txt ^| find ":"
find:“^需要删除;))
/*
我忠告:
find ":" ^<paths.txt
type paths.txt ^| find ":"
find:“^find:”@dbenham…您建议的所有解决方案都在for循环外部完美工作,但在for循环的括号“()”内,它们不是。请告知语法。@DannyBoi特殊字符需要转义,请参阅刚刚执行的editIfindstr:“path.txt
在我得到的for循环之外,`N:\\D A N I E L-H P\U s E r s\P U b L I c Z:\\D A N I E L-H P\U s E r s\P U b L I c\F A v o r I t E s`这是故意在每个字符前加一个空格。@DannyBoi-您的文件必须是unicode(可能是UTF-16),这与FINDSTR不兼容。FINDSTR命令仅支持ASCII。我的答案已被编辑。find:“@dbenham…您建议的所有解决方案都在for循环之外完美工作,但在for循环的括号“()”内,它们不是。请告知语法。@DannyBoi特殊字符需要转义,请参阅刚刚执行的editIfindstr:“path.txt
在我得到的for循环之外,`N:\\D A N I E L-H P\U s E r s\P U b L I c Z:\\D A N I E L-H P\U s E r s\P U b L I c\F A v o r I t E s`这是故意在每个字符前加一个空格。@DannyBoi-您的文件必须是unicode(可能是UTF-16),这与FINDSTR不兼容。FINDSTR命令仅支持ASCII。我的答案已被编辑。--findstr---键入N:\\DANIEL-HP\Users\Public Z:\\DANIEL-HP\Users\Public\Favorites N:\\DANIEL-HP\Users\Public Z:\\DANIEL-HP\Users\Public\Favorites---重定向N:\\DANIEL-HP\Users\Public\Favorites N:\\DANIEL-HP\Users\Public Z:\\DANIEL-HP\Users\Public\Favorites
这是我得到的输出--findstr---键入N:\\DANIEL-HP\Users\Public Z:\\DANIEL-HP\Users\Public\Favorites N:\\DANIEL-HP\Users\Public Z:\\DANIEL-HP\Users\Public\Favorites---重定向N:\\DANIEL-HP\Users\Public Z:\\DANIEL-HP\Users\Public\Favorites N:\\DANIEL-HP\Users\Public Z:\\DANIEL-HP\Users\Public\Favorites
这是我得到的输出
@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)