2013-02-21 53 views
1

在Windows資源管理器中,當我通過批處理文件拖放100個文件時,出現錯誤,提示「傳遞給系統調用的數據區太小」將符合條件的目錄中的所有文件傳遞給程序

我生成批處理文件採取100點的參數,像這樣,認爲它會工作

MyProg.exe %1 %2 %3 %4 %5 ... %100

MYPROG採取了一堆的路徑和做的事情給他們。

所以現在我的解決辦法是

for %%X in (*.my_ext) do (
    MyProg.exe %%X 
) 

但是,這一次又一次的初始化我的計劃,因爲我只是路過一個文件到它,這有點違背接受的參數設置任意數量的目的,這啓動+結束正在放慢速度。

理想情況下,我想將所有文件傳遞給我的程序並讓它運行。 我該如何做到這一點?

編輯:

一個我要去的想法是這樣的一個:How to concatenate strings in a Windows batch file?

我的解決方法現在看起來是這樣。我有兩個批處理文件get_files.batmain.bat

get_files.bat

@echo off 
set myvar=myProg.exe 
for /r %%i in (*.my_ext) DO call :concat "%%i" 
echo %myvar% 
goto :eof 

:concat 
set myvar=%myvar% %1 
goto :eof 

main.bat

call get_files.bat > out.bat 
call out.bat 

我首先要創建我要調用命令,然後我把它。 這允許我將與給定的crieria相匹配的100條路徑傳遞給我的程序,儘管它似乎在某種程度上我達到了輸入字符串可以長達多長時間的限制。

理想的解決方案看起來像建立一個列表儘可能長,並將該列表傳遞給程序,然後重複,直到所有文件已被處理。這些文件可能會被遞歸搜索等。

+0

是否可以將您的程序替換爲「MyProg %% X」? – user2033427 2013-02-21 04:13:43

+0

對不起,你的意思是? – MxyL 2013-02-21 04:18:05

+0

我的意思是將你的程序複製並粘貼在(* .my_ext)do('和')''中的%% X之間。 – user2033427 2013-02-21 04:19:14

回答

0

Microsoft已發佈支持文章command prompt (cmd. exe) command-line string limitation

在運行Microsoft Windows XP或更高版本的計算機上,可以在命令提示符處使用的字符串的最大長度爲8191個字符。在運行Microsoft Windows 2000或Windows NT 4.0的計算機上,可以在命令提示符處使用的最大字符串長度爲2047個字符。

避免執行具有多個文件的應用程序的這種限制的最佳方法是使用Andriy M也建議的列表文件。

例如,WinRAR將文件名以@解釋爲列表文件的名稱,該文件包含逐行列出的要壓縮/解壓縮的文件的名稱。

文本編輯器UltraEdit支持命令行選項/f"name of list file"打開指定列表文件中逐行列出的所有文件。

而文件管理器Total Commander支持%L, %l, %F, %f, %D, %d, %WL, %WF, %UL, %UF在由Total Commander調用的應用程序的命令行中。通過其中一個佔位符,Total Commander在臨時文件的目錄中創建一個列表文件,其中逐行寫入所選文件的名稱,然後以該列表文件的名稱啓動應用程序。 Total Commander甚至監控已啓動的應用程序,並在應用程序終止後刪除列表文件。

我認爲,在你的情況下,最好的辦法是在逐行處理這個文件中列出的所有文件之後刪除列表文件本身。

相關問題