2017-03-22 43 views
1

我有與這些3行文本文件var_list.txt一個c:\test目錄複製:爲什麼我不能在Windows批處理文件中的變量名

ABC
XYZ
高清

我有一個C:\test\source目錄,其中有一個文本文件source_file.txt

我有一個C:\test\target目錄是空的。

我想寫一個Windows批處理文件,該文件執行以下任務:

  1. 閱讀var_list.txt一行一行的變量
  2. 每個符合文件複製source_file.txtC:\test\source目錄 C:\test\target目錄名稱也有變量行附加到它的名字

因此,當我運行這個Windows批處理文件,我想它創建這些3 f爾斯:

  1. target_file_abc.txt
  2. target_file_xyz.txt
  3. target_file_def.txt

所以我在c:\test目錄下創建一個Windows批處理文件create_target_files.bat這些內容:

@echo off 
for /f "tokens=*" %%a in (var_list.txt) do (
    echo line=%%a 
    copy /Y /V C:\test\source\source_file.txt C:\test\target\target_file_%a%.txt 
) 
pause 

當我運行它,我得到這樣的輸出:

線= ABC複製
1文件(多個)。
line = xyz
複製1個文件。
line = def
複製1個文件。
按任意鍵繼續。 。 。

C:\test\target目錄只有1個文件target_file_.txt創建。爲什麼3個文件不是用變量名創建的?

回答

1

代碼中存在一個小錯誤。

copy /Y /V C:\test\source\source_file.txt C:\test\target\target_file_%a%.txt 

在這行代碼,您使用的是%a%代替%%a

由於您未指定變量,因此%a%會給您一個空白字符串。

因此,所有複製的文件被命名爲target_file_.txt並且它們被最後一個文件覆蓋。

0

你可以做這樣的事情:

@echo off 
setlocal enabledelayedexpansion 
for /f "tokens=*" %%a in ('Type "C:\test\var_list.txt"') do (
    Set "line=%%a" 
    echo !line! 
    Copy /y /v "C:\test\source\source_file.txt" "C:\test\target\target_file_!line!.txt" 
) 
pause & exit 

欲瞭解更多信息,如何以及何時使用Enabledelayedexpansion

相關問題