Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 为什么for/f会调出文件名?_Parsing_Batch File_For Loop_Filenames - Fatal编程技术网

Parsing 为什么for/f会调出文件名?

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

我有一个名为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 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特殊字符需要转义,请参阅刚刚执行的editI
findstr:“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特殊字符需要转义,请参阅刚刚执行的editI
findstr:“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)