首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >批处理文件:将文件名从FOR循环传递给子文件

批处理文件:将文件名从FOR循环传递给子文件
EN

Stack Overflow用户
提问于 2018-11-19 15:49:50
回答 1查看 829关注 0票数 0

这个问题是关于将文件名参数传递给批处理文件中的子例程的正确语法。我觉得这个问题应该被问过,但我似乎找不到正确的答案。假设在一个名为C:\Batch File Example的文件夹中有三个文本文件。以下代码(部分借用自this answer)将输出文件名:

代码语言:javascript
运行
复制
@echo off
SETLOCAL Enableextensions

ECHO Line before FOR
FOR /R "C:\Batch File Example\" %%i in (*.txt) DO ECHO %%i
ECHO Line after FOR & PAUSE>NUL

输出:

代码语言:javascript
运行
复制
Line before FOR
C:\Batch File Example\File1.txt
C:\Batch File Example\FIle2.txt
C:\Batch File Example\File3.txt
Line after FOR

现在,我希望使用一个子程序来生成相同的输出,如下所示:

代码语言:javascript
运行
复制
@echo off
SETLOCAL Enableextensions

ECHO Line before FOR
FOR /R "C:\Batch File Example\" %%i in (*.txt) DO CALL :doecho %%i
ECHO Line after FOR & PAUSE>NUL
GOTO :EOF

:doecho
SET VAR=%1
ECHO VAR is %VAR%
EXIT /b

但是,这提供了以下输出,其中的结果被截断:

代码语言:javascript
运行
复制
Line before FOR
VAR is C:\Batch
VAR is C:\Batch
VAR is C:\Batch
Line after FOR

上面的结果表明,空白被视为分隔符,而%1只包含C:\Batch,因此我尝试使用下面的for循环,使用/F标志和逗号分隔符来抑制空格:

代码语言:javascript
运行
复制
FOR /F "delims=," %%i IN ("C:\Batch File Example\*.txt") DO CALL :doecho %%i

但是,这也返回截断的结果,唯一的区别是只有一个迭代而不是三个迭代。

我尝试过使用enhanced variable substitionts,比如%~I,而不是%%i%1,但是我被困住了。那我错过了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-19 15:54:04

参数由空格分隔-因此C:\Batch File Example\file.txt是三个参数(更多,如果文件名也包含空格)。

要么使用%* (“所有参数”)代替%1,要么使用引号:... CALL :doecho "%%I",然后使用单个(引用)参数。如果您需要删除子例程中的引号,请使用%~1

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53378230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档