的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
用英文解釋。 Unix查找語法沒有幫助,它看起來像你已經給出了一個輸出文件,沒有輸入文件。 – foxidrive
只需[GNU find for Windows](http://gnuwin32.sourceforge.net/packages/findutils.htm) – Endoro