2012-07-16 156 views
1

我需要一個批處理文件來基於文件名將文件從單個文件夾複製到多個文件夾。這些文件的格式爲aBBccccc.txt,其中a和ccccc無關緊要,但BB是2個字符代碼。例如,文件aQWertyu.txt aWErtyui.txt應分別複製到文件夾QW和WE,並且這些文件夾將由腳本創建。根據文件名中的字符複製文件的批處理文件

我見過使用FOR/f的示例腳本,但看不到如何解析文件,檢查字符2和3,然後創建文件夾並複製文件。

謝謝。

回答

5

這需要多個部件:

  1. 延遲擴展。這需要從下面的循環中得到一個字符串:

    setlocal enableextensions enabledelayedexpansion 
    
  2. 一個for循環用於遍歷文件

    for %%x in (*.txt) do (
    
  3. 找到相關的字符串:

    set "filename=%%x" 
        set "folder=!filename:~1,2!" 
    

    注這裏使用!filename!。這是使用延遲擴展。通常環境變量以%filename%引用,但是當解析完成的循環時,這些變量將被擴展,然後完成循環,然後將%filename%減少爲無。延遲擴展,使用!解決了這個問題。

  4. 創建的文件夾:

    if not exist !folder! mkdir !folder! 
    

    ,如果它不存在這個僅創建該文件夾。

  5. 複製文件:

    copy "%%x" !folder! 
    ) 
    

全部放在一起:

@echo off 
setlocal enableextensions enabledelayedexpansion 
for %%x in (*.txt) do (
    set "filename=%%x" 
    set "folder=!filename:~1,2!" 
    if not exist !folder! mkdir !folder! 
    copy "%%x" !folder! 
) 
+0

非常感謝 - 完美!對於'設置'文件夾=!文件名:〜1,2!''1和2 - 1的規則是恆定的,那麼接下來的2個字符? – user1528218 2012-07-16 08:16:40

+0

1是開始子串的字符,2是長度。 – Joey 2012-07-16 08:24:50

+0

認爲是這樣,但是不會讓它成爲2,2,因爲我想要使用的字符是從2位開始的2個字符,還是位置0的第一個字符? – user1528218 2012-07-16 08:29:04

相關問題