首页 > 解决方案 > for /f 循环连接参数

问题描述

@echo off
setlocal enableextensions enabledelayedexpansion
title Testing
color 4f

for /l %%x in (1,1,3) do (
  rem This is working
  set var1=%%x.extention
  echo !var1!
  for /f "tokens=2 delims==" %%a in (
      'wmic datafile where "name='C:\\Windows\\System32\\notepad.exe'" get version /value') do (
      ::This is NOT working. WHy??
      set var2=%%a.exention
      )

  echo !var2!

)

@pause

有人能帮助我吗?我正在尝试连接一些变量、for-loop参数和字符串。麻烦是在循环参数的末尾得到一个字符串。.extentionin中的字符串首先set var2显示.extension字符串,而不是我想要的最后一个。

标签: batch-filefor-loop

解决方案


问题是该wmic命令的输出是 Unicode 文本,并且for /F在将其转换为 ANSI 文本时遇到了问题,因此留下了一些孤立的回车字符,这让您的输出看起来很奇怪。您可以通过将批处理脚本的输出重定向到一个文件并通过十六进制查看它来证明这一点。编辑。

要解决此问题,请环绕另一个for /F循环,如下所示:

for /F "delims=" %%b in ('
    wmic DataFile where "Name='C:\\Windows\\System32\\notepad.exe'" get Version /VALUE
') do for /F "tokens=2 delims==" %%a in ("%%b") do (
    echo(%%a.extension
)

注意:
不要::在块或循环中使用 -style 注释,因为它们可能会导致意外行为;改为使用rem


推荐阅读