2015-10-09 108 views
0

所以我有下面的批處理文件。批處理文件拖放多個文件從一個文件夾到一個新文件夾錯誤

@ECHO OFF 
    FOR %%I IN (.) DO SET FolderName=%%~nxI 
    MKDIR "C:\%FolderName%" 
    for %%i in (%*) do (
     move "%%~i" "C:\%FolderName%" 
    ) 

所以,當我拖放多個文件到批處理文件,它會採取認爲我拖放型,在C創建一個新文件夾中的文件的文件夾的名稱:\具有相同名稱然後將文件移動到C:\

處的新文件夾中。

示例:保存要移動的文件的文件夾是名稱Shop。然後將文件夾店位於

... \地面\鍾\塔\店

使用批處理文件將創建一個新的文件夾名稱店鋪C:\

C:\ Shop

當我一次拖放大約100個文件時,批處理文件就起作用。問題是,當我一次拖放300個文件時,它將返回錯誤,指出「文件名或擴展名太長」。我可以手動移動這些文件,所以我知道它不能由文件名太長造成。

然後我做了一個新的批處理文件思考也許這是move命令或我的for循環的問題。所以我寫下面的批處理文件。

@echo off 
    FOR %%I IN (.) DO SET FolderName=%%~nxI 
    MKDIR "C:\%FolderName%" 
    MOVE "%cd%\*.*" "C:\%FolderName%" 

現在上面的第二個批處理文件的工作原理與第一個批處理文件大致相同。只需要第二個批處理文件,我只需從要移動的文件夾中拖放一個文件,即可將第一個文件夾中的所有文件移動到C:\中的新文件夾,即使第一個文件夾1000個文件。

我的問題是爲什麼第一批文件失敗,如果我一次拖放太多的文件。使用第二批文件工作,所以它不可能是因爲move命令還是它?由於我將所有文件從一個文件夾移動到另一個文件夾,第二個批處理文件符合我的需要,並且想知道是否會出現第二個批處理文件的問題或更好的方法。

回答

1

當你在你的蝙蝠文件上拖放文件時,你的蝙蝠實際上被調用,就好像你會在你的命令提示符下調用它一樣。所以,如果你拖上你的蝙蝠即三個文件

Testfile.txt 
Testfile.md 
Testfile.jpg 

那麼實際上你的蝙蝠被稱爲像這樣:

C:\MyBatch.BAT Testfile.txt Testfile.md Testfile.jpg 

如果你調用更多的顯然是這樣的:

C:\MyBatch.BAT Testfile.txt Testfile.md Testfile.jpg Testfile01.txt Testfile01.md Testfile01.jpg Testfile02.txt Testfile02.md Testfile02.jpg Testfile03.txt Testfile03.md Testfile03.jpg Testfile04.txt Testfile04.md Testfile04.jpg Testfile05.txt Testfile05.md Testfile05.jpg etc... 

啊,你可以閱讀其餘的部分?好吧,這不是隻要1000個文件,但明白你的腳本有什麼不同。您的命令行緩衝區將無法捕獲那麼多輸入。

實際上,你可以在命令提示符中輸入多少個字符的大小在系統之間有所不同,但在winXP中有一些像8k的東西,我估計它仍然是一樣的。

http://support.microsoft.com/kb/830473 < - 可以幫助更多關於最高

而且,由於你的命令提示符的長度是如此之「短」,你必須找到不同的方法來延長文件的路徑 - 因爲你沒有 - 你也可以解決這個問題,如果你輸出你想在文本中複製文件文件,然後將其用作副本棒的輸入。

dir /b >filelist.txt 

所以現在你有這樣的文件列表,那麼你只需要通過線閱讀文本文件行:

for /f "delims=" %%i in (filelist.txt) do echo D|xcopy "C:\FolderName\%%i" "c:\temp\%%i" /i /z /y 

所以這實際上將讀取你的文件LIST.TXT和意志(每個文件名在列表中)按D鍵並將其傳送到XCopy命令。

所以管道中的文件列表,以您的命令是一個更好的方法,這裏居然在你的情況,如果你真的希望整個目錄,而不僅僅是選擇,拷貝目錄是不是文件複製文件速度更快。

希望你問題的答案。

+0

謝謝你,這是很翔實。現在我明白爲什麼第一批文件失敗了。我按文件移動文件並創建新文件夾的原因是,新文件夾在運行批處理文件時會有一個新的「創建日期」,而我不希望文件夾名稱成爲日期。除非複製目錄也可以更改文件夾上的「創建日期」。 – Tou

+0

我認爲在'''複製'''有一個參數來「觸摸」具有特定日期的所有文件...我不確定現在,你需要檢查那裏的手冊'''/ b'' '右[複製命令行開關(https://technet.microsoft.com/en-us/library/bb490886.aspx) –

+0

一個選項可以是拖放容器目錄到批處理文件,而不是大量的文件;因此批處理腳本可以使用'for'來枚舉目錄內容(即使在使用'/ R'開關時也是遞歸的),所以避免使用太長的命令行;當然也可以應用特定的過濾... – aschipfl

0

如果我沒有記錯,您要創建爲名稱的父文件夾的文件夾。所以在你再次發帖詢問同一個問題之前,我會編碼你正在尋找的東西。

@echo off 
setlocal 
set "destination=c:\destination" 

for %%i in (%~1) do set "parent=%%~pi" &goto:next 
:next 
for %%i in ("%parent:~0,-1%") do set "parent=%%~nxi" 

for %%i in (%*) do (
    echo: 
    if not exist %destination%\%parent%\nul (mkdir "%destination%\%parent%") 
    move "%%~i" "%destination%%parent%" 
) 

此外,有許多參數的命令是不是在前面的代碼有問題。

例如:寫下面的代碼

@echo off 
setlocal 
set "destination=c:\destination" 

for %%i in (%~1) do set "parent=%%~pi" &goto:next 
:next 
for %%i in ("%parent:~0,-1%") do set "parent=%%~nxi" 

for %%i in (%*) do (
    echo: 
    if not exist %destination%\%parent%\nul (echo mkdir "%destination%\%parent%") 
    echo move "%%~i" "%destination%%parent%" 
) 

調用它test-move.bat一個批處理文件,並把250個參數如下長的命令行CMD:

test-move.bat TestFile001.txt TestFile002.txt TestFile003.txt TestFile004.txt TestFile005.txt TestFile006.txt TestFile007.txt TestFile008.txt TestFile009.txt TestFile010.txt TestFile011.txt TestFile012.txt TestFile013.txt TestFile014.txt TestFile015.txt TestFile016.txt TestFile017.txt TestFile018.txt TestFile019.txt TestFile020.txt TestFile021.txt TestFile022.txt TestFile023.txt TestFile024.txt TestFile025.txt TestFile026.txt TestFile027.txt TestFile028.txt TestFile029.txt TestFile030.txt TestFile031.txt TestFile032.txt TestFile033.txt TestFile034.txt TestFile035.txt TestFile036.txt TestFile037.txt TestFile038.txt TestFile039.txt TestFile040.txt TestFile041.txt TestFile042.txt TestFile043.txt TestFile044.txt TestFile045.txt TestFile046.txt TestFile047.txt TestFile048.txt TestFile049.txt TestFile050.txt TestFile051.txt TestFile052.txt TestFile053.txt TestFile054.txt TestFile055.txt TestFile056.txt TestFile057.txt TestFile058.txt TestFile059.txt TestFile060.txt TestFile061.txt TestFile062.txt TestFile063.txt TestFile064.txt TestFile065.txt TestFile066.txt TestFile067.txt TestFile068.txt TestFile069.txt TestFile070.txt TestFile071.txt TestFile072.txt TestFile073.txt TestFile074.txt TestFile075.txt TestFile076.txt TestFile077.txt TestFile078.txt TestFile079.txt TestFile080.txt TestFile081.txt TestFile082.txt TestFile083.txt TestFile084.txt TestFile085.txt TestFile086.txt TestFile087.txt TestFile088.txt TestFile089.txt TestFile090.txt TestFile091.txt TestFile092.txt TestFile093.txt TestFile094.txt TestFile095.txt TestFile096.txt TestFile097.txt TestFile098.txt TestFile099.txt TestFile100.txt TestFile101.txt TestFile102.txt TestFile103.txt TestFile104.txt TestFile105.txt TestFile106.txt TestFile107.txt TestFile108.txt TestFile109.txt TestFile110.txt TestFile111.txt TestFile112.txt TestFile113.txt TestFile114.txt TestFile115.txt TestFile116.txt TestFile117.txt TestFile118.txt TestFile119.txt TestFile120.txt TestFile121.txt TestFile122.txt TestFile123.txt TestFile124.txt TestFile125.txt TestFile126.txt TestFile127.txt TestFile128.txt TestFile129.txt TestFile130.txt TestFile131.txt TestFile132.txt TestFile133.txt TestFile134.txt TestFile135.txt TestFile136.txt TestFile137.txt TestFile138.txt TestFile139.txt TestFile140.txt TestFile141.txt TestFile142.txt TestFile143.txt TestFile144.txt TestFile145.txt TestFile146.txt TestFile147.txt TestFile148.txt TestFile149.txt TestFile150.txt TestFile151.txt TestFile152.txt TestFile153.txt TestFile154.txt TestFile155.txt TestFile156.txt TestFile157.txt TestFile158.txt TestFile159.txt TestFile160.txt TestFile161.txt TestFile162.txt TestFile163.txt TestFile164.txt TestFile165.txt TestFile166.txt TestFile167.txt TestFile168.txt TestFile169.txt TestFile170.txt TestFile171.txt TestFile172.txt TestFile173.txt TestFile174.txt TestFile175.txt TestFile176.txt TestFile177.txt TestFile178.txt TestFile179.txt TestFile180.txt TestFile181.txt TestFile182.txt TestFile183.txt TestFile184.txt TestFile185.txt TestFile186.txt TestFile187.txt TestFile188.txt TestFile189.txt TestFile190.txt TestFile191.txt TestFile192.txt TestFile193.txt TestFile194.txt TestFile195.txt TestFile196.txt TestFile197.txt TestFile198.txt TestFile199.txt TestFile200.txt TestFile201.txt TestFile202.txt TestFile203.txt TestFile204.txt TestFile205.txt TestFile206.txt TestFile207.txt TestFile208.txt TestFile209.txt TestFile210.txt TestFile211.txt TestFile212.txt TestFile213.txt TestFile214.txt TestFile215.txt TestFile216.txt TestFile217.txt TestFile218.txt TestFile219.txt TestFile220.txt TestFile221.txt TestFile222.txt TestFile223.txt TestFile224.txt TestFile225.txt TestFile226.txt TestFile227.txt TestFile228.txt TestFile229.txt TestFile230.txt TestFile231.txt TestFile232.txt TestFile233.txt TestFile234.txt TestFile235.txt TestFile236.txt TestFile237.txt TestFile238.txt TestFile239.txt TestFile240.txt TestFile241.txt TestFile242.txt TestFile243.txt TestFile244.txt TestFile245.txt TestFile246.txt TestFile247.txt TestFile248.txt TestFile249.txt TestFile250.txt 
相關問題