2011-11-29 128 views
0

記錄路徑,我需要能夠查找某些文件的擴展名,獲取路徑,文件複製到路徑,在文本文件中

  • 搜索目錄及其與擴展特定文件的子目錄。 ac每個目錄只有一個。
  • 然後,我需要能夠將一些文件複製到其中包含* .ac的目錄中。當文件被複制時,它們需要與沒有擴展名的* .ac文件具有相同的名稱。所以如果* .ac文件是foobar.ac我需要能夠將foobarMS.cvw複製到目錄。它可以只複製一個文件,但將其重命名爲適合目錄。
  • 一旦完成複製文件,把它保存在一個文本文件,路徑
  • 這將循環,直到它已通過所有子目錄不見了

當我再次運行該腳本,這將是很高興能夠交叉引用已完成目錄的列表,因此不必再次複製到它們。或者,如果速度更快,可以忽略交叉引用列表並只複製命令而不覆蓋。

我到目前爲止,但把它放在一起正在讓我悲傷。

我能夠通過列出* .AC文件的目錄:

for /d /r %%a in (*) do @if exist %%a\*.ac (echo %%a) 

這是我到目前爲止有:

@echo off 
cls 
for /D /R %%a in (*) do @if exist "%%a\*.ac" (
    if not exist "%%a\%%~Nacb.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Nacb.cvw">nul 
    ) 
    if not exist "%%a\%%~Naia.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Naia.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzcd.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzcd.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzcpl.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzcpl.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzlnr.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzlnr.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzms.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzms.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzmt.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzmt.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzmu.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzmu.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzmv.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzmv.cvw">nul 
    ) 
    if not exist "%%a\%%~Najzmw.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Najzmw.cvw">nul 
    ) 
    if not exist "%%a\%%~Nalt.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Nalt.cvw">nul 
    ) 
    if not exist "%%a\%%~Nams.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Nams.cvw">nul 
    ) 
    if not exist "%%a\%%~Namt.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Namt.cvw">nul 
    ) 
    if not exist "%%a\%%~Namu.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Namu.cvw">nul 
    ) 
    if not exist "%%a\%%~Namv.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Namv.cvw">nul 
    ) 
    if not exist "%%a\%%~Namw.cvw" (
     copy .\jzitfix.cvw "%%a\%%~Namw.cvw">nul 
    ) 
    if not exist "%%a\fixed" (
     copy .\jzitfix.cvw "%%a\fixed">nul 
     echo FIXED: %%~Na 
     echo %%~Na >> fixed.txt 
    ) 
) 

回答

1
@echo off 
rem in the FOR loop %%~Pa is the directory name and %%~Na the file name 
for /R %%a in (*.ac) do (
    if not exist %%~Pa%%~NaMS.cvw (
     copy \fixed\path\%%~NaMS.cvw %%~Pa 
     echo %%~Pa>> textfile.txt 
    ) 
) 

附錄

對不起,也許我誤解了一些觀點。根據您的描述第一,我的代碼執行以下操作:

FOR與.AC擴展每個路徑\文件(例如,「foobar.ac」): 複製具有相同的名稱加上「MS」和文件將.cvw擴展名(例如「foobarMS.cvw」)擴展爲相同的路徑並將該路徑保存在文本文件中,但前提是該文件不存在。

我從你的要求中推導出最後一部分(「只有當這個文件不存在」時):「當我再次運行腳本時,它將很好......不必再次複製到它們或者......只是讓複製命令不覆蓋「)。

你的解釋清楚地說:「當文件被複制時,它們需要與沒有擴展名的* .ac文件具有相同的名稱......」和「複製完文件後,將該路徑保存在文本文件中「。所以,我不明白你的第二個例子的多個名字來自哪裏。

也許你的第一描述不清,應該是:

  • 搜索目錄及其子目錄與.AC擴展名的特定文件。
  • 檢查存在一系列擴展名爲.cvw的固定名稱文件的路徑;每個名稱都以.ac文件的相同名稱開頭,後跟其中一個字符串:cb ia ... mw。如果其中一個文件不存在,請將文件\ jzitfix.cvw複製到該路徑和名稱。

如果是這樣的話,那麼我不知道什麼時候「保存爲文本文件路徑」:當每個文件被複制(重複每個丟失的文件相同的路徑)?或者只是每個路徑一次?或者只有至少有一個文件被複制?

批處理文件下面是按照以前的描述修改後的版本:

@echo off 
rem in the FOR loop %%~Pa is the directory name and %%~Na the file name 
for /R %%a in (*.ac) do (
    for %%b in (cb ia etc mw) do (
     if not exist %%~Pa%%~Na%%b.cvw (
      copy .\jzitfix.cvw %%~Pa%%~Na%%b.cvw > nul 
     ) 
    ) 
) 

如果這仍然不是你想要的,那麼請用更多的細節和你想要的例子解釋了!

+0

我會試試這個。 – qroberts

+0

哇這是美麗的。有批量的數組嗎?會更好,因爲我需要爲16個文件做一個副本。 – qroberts

+0

@qroberts:查看我的附錄... – Aacini

相關問題