2014-09-02 81 views
0

我試圖在搜索某些文件類型時只從一個已知路徑中獲取一個目錄名稱。在下面的例子中,我正在搜索mp4視頻文件,然後我想將它們轉換並將它們移動到不同父目錄中同名的子目錄中。直到文件的直接父目錄,路徑才知道,所以我試圖刪除已知部分的路徑。雖然這給了我很多麻煩。在下面的示例中,set命令後變量newDir爲空,它僅顯示輸入~13且啓用了@echo。誰能告訴我我做錯了什麼?批處理 - 通過某個文件類型循環刪除子字符串

例子:

setlocal enabledelayedexpansion 

FOR /R %%X in ("*.mp4") DO (
    set currDir="%%~pX"  &REM "\test1\test2\dir1" 
    set newDir=%currDir:~13% &REM dir1 
    mkdir "C:\new\%newDir%" &REM suppose to be "C:\new\dir1", mine is just "C:\new\" 
    REM convert mp4 here 
    cp %%X "C:\new\%newDir%" &REM copies the file 
) 

回答

0

隨着for循環enabledelayedexpansion,你應該使用!newDir!代替%newDir%,也!currDir:~13!而不是%currDir:~13%,使延遲擴張發生。

[更新]也有小錯誤。當您對變量set應該注意空格和引號。它們是要設置的字符串的實際部分。並且你有多個相同的目錄mkdir,並且對用戶copyxcopy而不是'cp'應該是從「Cygwin」或「MinGW32」什麼的更好。如果不存在,xcopy會自動爲您創建文件夾。

要使您的代碼正常工作,請參閱下文。並且建議您在開始編程之前,更多地瞭解關於bat的更多基本知識。

@echo off & setlocal enabledelayedexpansion 

FOR /R %%X in ("*.mp4") DO (
    set currDir=%%~pX 
    set newDir=!currDir:~13! 
    REM mkdir "C:\new\!newDir!" 
    REM convert mp4 here 
    xcopy "%%X" "C:\new\!newDir!" 
) 
+0

事情看起來有點時髦與報價(我需要因爲一些目錄名有空格)和驚歎號。就像它試圖使目錄'「C:\ new \ dir1 \」',但在初始測試似乎工作。我需要額外的測試來確保它不會與其他東西混淆。 – user3499973 2014-09-02 03:53:56

+0

第二次看,它不會工作。使用'「C:\ new \!newDir!」'的轉換輸出嘗試創建一個輸出文件'「C:\ new \ dir1 \ \ output.out」「或者」C:\ new \ dir1 \ output.out 「(取決於我是否添加斜槓),在這兩種情況下給出」找不到指定的路徑「。 – user3499973 2014-09-02 04:04:46

+0

''C:\ new \ dir1 \「'中的空格在每行之後都是來自'」&REM ...「的實際內容。請刪除它們,或將它們放在其他行中。 – Landys 2014-09-02 06:29:10

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
FOR /R "%sourcedir%" %%a IN (*.mp4) DO (
FOR %%m IN ("%%~dpa.") DO ECHO(XCOPY "%%a" "c:\new\%%~nm\" 
) 

GOTO :EOF 

你需要改變的sourcedir設置,以滿足您的具體情況。

爲了測試目的,所需的XCOPY命令僅僅是ECHO驗證命令是否正確後,將ECHO(XCOPY更改爲XCOPY以實際複製文件。

我注意到你正在使用非常cygwin尼代cp代替copy。小心名稱。我將命令更改爲xcopy,以便可以根據需要自動生成目標目錄。請注意,如果目標文件已經存在,您還沒有說明您想要執行的操作。

這裏有我的測試目錄中運行一個試驗:

XCOPY "U:\sourcedir\misc\90s\ACDC - Back in Black.mp4" "c:\new\90s\" 
XCOPY "U:\sourcedir\misc\90s\extended\Kelly Rowland - Wor! (Freemasons Arabic Mix).mp4" "c:\new\extended\" 
XCOPY "U:\sourcedir\misc\90s\extended\Kelly Rowland - Work (Freemasons Arabic Mix).mp4" "c:\new\extended\" 
XCOPY "U:\sourcedir\one\dummyfile1.mp4" "c:\new\one\" 
XCOPY "U:\sourcedir\t w o\dum myfile2.mp4" "c:\new\t w o\" 
XCOPY "U:\sourcedir\t w o\dum ile2.mp4" "c:\new\t w o\" 
相關問題