首页 > 解决方案 > 如何在 Windows 上的批处理脚本中附加/连接变量

问题描述

我是批处理编码的新手。所以在基础上苦苦挣扎。我想连接 2 个变量,然后在第三个变量中打印其连接结果。

批号

@echo off
SET basePath = C:\Users\Documents\
echo  basePath - %basePath%
SET fileName = T_test 
echo fileName - %fileName%
SET extension= .csv
echo extension - %extension%

SET finalvalue = %basePath%%fileName%%extension%
echo finalvalue - %finalvalue%
pause

实际输出

 basePath -
fileName -
extension -  .csv
finalvalue -

预期产出

  basePath - C:\Users\Documents\
  fileName - T_test
  extension - .csv
  finalvalue - C:\Users\Documents\T_test.csv

*****更新******

由于 fileName 变量有多个用逗号分隔的值。我想一个一个地迭代它

Batch Code

@echo off
    SET basePath=C:\Users\Documents\
    echo  basePath - %basePath%
    SET fileName=T_test,T_test2,T_test3 
    echo fileName - %fileName%
    SET extension=.csv
    echo extension - %extension%

     for %%f in (%fileName%) do (      
      SET completepath=%basePath%%%f%extension%
      echo completepath - %completepath%
      )
    pause

实际输出

basePath - C:\Users\Documents\
fileName - T_test,T_test2,T_test3
extension - .csv
completepath -
completepath -
completepath -

预期产出

basePath - C:\Users\Documents\
    fileName - T_test,T_test2,T_test3
    extension - .csv
    completepath - C:\Users\Documents\T_test.csv
    completepath - C:\Users\Documents\T_test2.csv
    completepath - C:\Users\Documents\T_test3.csv

代码更新 2:

@echo off
setlocal EnableDelayedExpansion 
SET basePath=C:\Users\Documents\
echo  basePath - %basePath%
SET fileName=T_test,T_test2,T_test3 
echo fileName - %fileName%
SET extension=.csv
echo extension - %extension%
for %%f in (%fileName%) do (    

:: below echo prints expected value i.e. 1st iteration -  T_Test, 2nd iteration - T_test2, 3rd iteration - T_test3
  echo current file name - %%f  

  SET completepath=%basePath%!f!%extension%  

:: below echo prints nothing, expected value 1st iteration -  C:\Users\Documents\T_test.csv, 2nd iteration - C:\Users\Documents\T_test2.csv   
    echo completepath - %completepath%  
)

pause

标签: batch-filecommand-prompt

解决方案


这是您的“代码更新 2”示例,包含推荐的Set语法和适当使用延迟扩展。

@Echo Off
SetLocal DisableDelayedExpansion 
Set "basePath=%USERPROFILE%\Documents"
Echo basePath - %basePath%
Set "fileName=T_test,T_test2,T_test3"
Echo fileName - %fileName%
Set "extension=.csv"
Echo extension - %extension%
For %%A In (%fileName%) Do (
    Echo current file name - %%A
    Set "completepath=%basePath%\%%A%extension%"
    SetLocal EnableDelayedExpansion
    Echo completepath - !completepath!
    EndLocal
)
Pause

推荐阅读