2013-09-22 21 views
0

我怎麼能產生相同的結果,但使用的是Windows(MS-DOS命令):的Unix功能找到MS-DOS

'find ./ -type f \(-name "*.Z3D" -or -name "*.z3d" -or -name "*.Z3d" -or -name "*.z3D" \)  -size +1000 > list_Z3D.txt' 

list_Z3D.txt:

.//data/BOX07_CH4/ZEN111.Z3D 
.//data/BOX07_CH4/ZEN111_copy.Z3D 
.//data/BOX07_CH5/ZEN065.Z3D 
.//data/BOX07_CH5/ZEN065_copy.Z3D 
.//data/ZEN111_bis1.Z3D 
.//data/ZEN111_bis2.Z3D 
.//data/ZEN111_bis3.Z3D 
.//sch_1/NBL01_CH1/ZEUS3058.Z3D 
.//sch_1/NBL01_CH2/ZEUS3064.Z3D 
.//sch_1/NBL01_CH4/ZEUS3075.Z3D 
.//sch_1/NBL01_CH5/ZEUS3083.Z3D 
+0

用英文解釋。 Unix查找語法沒有幫助,它看起來像你已經給出了一個輸出文件,沒有輸入文件。 – foxidrive

+1

只需[GNU find for Windows](http://gnuwin32.sourceforge.net/packages/findutils.htm) – Endoro

回答

1

的Windows文件名是區分不敏感,所以簡化了一些事情。但cmd.exe(批處理)沒有非常複雜的目錄列表功能。你可能會更喜歡PowerShell之類的東西,但我不太瞭解這種腳本語言。

或更好的是,按照Endoro在評論中的建議使用免費的gnu find for Windows實用程序。

但是,如果你想自己限制在本地cmd.exe(批)commmands,那麼下面有一些選擇:

以下命令將在命令行上工作。它將提供絕對路徑,但對於大小超過〜2 GB的文件無法正常工作,因爲cmd.exe數字僅限於帶符號的32位整數。大於最大值的數字將使用字符串語義而不是數字進行比較,從而給出錯誤的結果。文件大小總是以字節爲單位,所以我的大小相應的調整:

(for /r %F in (*.z3d) do @if %~zF geq 512000 echo %F) >list_Z3D.txt 

一定百分比(%)一倍批處理文件

@echo off 
(for /r %%F in (*.z3d) do if %%~zF geq 512000 echo %%F) >list_Z3D.txt 

相對路徑可以被FORFILES內得到使用,但它相對較慢。該命令可以在命令行和批處理文件中使用。對於超過〜2 GB的文件,它也無法正常工作。

forfiles /s /m *.z3d /c "cmd /c if @fsize geq 512000 echo @relpath" >list_Z3D.txt 

無論大小如何,WMIC都可以按文件大小進行精確的屏幕顯示。但是在處理目錄樹時,速度很慢。這提供了絕對路徑。

@echo off 
setlocal disableDelayedExpansion 
set "ext=z3d" 
set "sz=512000" 
for %%F in ("%cd%") do (
    set "drv=%%~dF" 
    set "pth=%%~pnxF\%%" 
) 
wmic datafile where "drive='%drv%' and path like '%pth:\=\\%' and filesize>%sz% and extension='%ext%'" get name |more +1 >list_Z3D.txt 

前兩種解決方案中的任何一種都可以通過附加編程實現大文件大小的工作。以下支持文件大小可達〜999 TB。這些解決方案將比WMIC解決方案更快。

爲了精確地獲得所> = 512000使用批處理文件中的文件的絕對路徑:

@echo off 
setlocal disableDelayedExpansion 
>list_Z3D.txt (
    for /r %%F in (*.z3d) do (
    set "sz=000000000000000%%~zF" 
    set "file=%%F" 
    setlocal enableDelayedExpansion 
    if !sz:~-15! geq 000000000512000 echo !file! 
    endlocal 
) 
) 

爲了準確地獲取在命令行上或在批處理文件是> = 512000的文件的相對路徑:

forfiles /s /m *.z3d /c "cmd /v:on /c set [email protected]&if !sz:~-15! geq 000000000512000 echo @relpath" >list_Z3D.txt 
+0

感謝這些非常準確的aswers。我想知道爲什麼會有這麼多的00000? – k4lls

+0

@ user1245845 - 零的數量是可調整的。我選擇了15位數字,以使檔案不可能超過限制。我認爲10是不夠的,因爲多GB的文件是相當普遍的。 12可能會足夠。 – dbenham

+0

forfiles/s/m * .z3d/c「cmd/v:on/c set sz = 000000000000000 @ fsize&if!sz:〜-15!geq 000000000512000 echo @relpath」> list_Z3D.txt不適用於XP。我覺得格式不一樣? – k4lls