SET 在批处理文件中的循环内不起作用[重复]
Posted
技术标签:
【中文标题】SET 在批处理文件中的循环内不起作用[重复]【英文标题】:SET is not working inside loop in batch file [duplicate] 【发布时间】:2021-07-29 14:33:39 【问题描述】:我想使用批处理脚本根据文件扩展名和文件名迭代文件夹中的所有文件。
我有下面的代码来获取文件扩展名,并且可以用%%~xa
回显它,但是当我尝试将它定义为file_extension
时,输出只是返回为ECHO is off.
谁能告诉我怎么做?
@echo off
setlocal EnableDelayedExpansion
for %%a in (folder\*) do (
echo Processing file = %%~nxa
echo Processing file extension %%~xa
echo Processing file name = %%~na
SET file_extension = %%~xa
echo !file_extension!
echo %%~xa
)
pause
【问题讨论】:
SET 工作正常,问题是您没有正确使用它!如果将其更改为echo !file_extension !
,它将起作用。但是,我建议您首先正确执行并使用SET file_extension=%%~xa
,或者更好的推荐语法Set "file_extension=%%~xa"
。
【参考方案1】:
cmd
与perl
、C#
等不一样。
cmd
实际上使用=
前后的空格作为变量名和值的一部分。
目前,您的代码 SET file_extension = %%~xa
将创建一个带有尾随空格 !File_extension !
和值中的前导空格的变量。 .txt
.
所以你必须在=
之前或之后设置它,而不是空格。最好也在变量和值周围使用双引号,以确保在值之后没有任何意外的空格。例如set var=val
将正确创建变量%var%
,但创建不正确的值val
。
所以在所有这些解释之后,这里是您当前代码的固定版本:
@echo off
setlocal EnableDelayedExpansion
for %%a in ("folder\*") do (
echo Processing file = %%~nxa
echo Processing file extension %%~xa
echo Processing file name = %%~na
set "file_extension=%%~xa"
echo !file_extension!
echo %%~xa
)
pause
【讨论】:
以上是关于SET 在批处理文件中的循环内不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章
为什么用户的输入值在批处理文件中的代码中不起作用? [重复]
dbms_output.put_line 在存储过程的 Cursor For 循环内不起作用
即使在设置 EnableDelayedExpansion [重复] 之后,也无法在批处理文件中的 for 循环内设置变量值