2012-07-18 184 views
2

這裏的情況是,我有一個名爲像這樣每個目錄10,000個文件目錄:DOS批處理文件查找丟失的順序文件名

FileName.XX9999.csv

FileName.XX0000.csv

文件名本身的尺寸可以改變,即:

FileName.XXX0000.csv

FileName.XXX9999.csv

FileName.XXXX0000.csv

FileName.XXXX9999.csv

其中x是另一種家長數量,但這些的人本來也應該忽略。

無論儘管所有的目錄都應該只有10,000個文件,但不會多也不少。麻煩是有些丟失,我需要知道哪些丟失。

我想在這篇文章中的腳本: batch script to find missing sequence no

我甚至混亂與周圍的字符串sequnce幾個小時無濟於事。這些選項都不能很好地工作,第二個腳本接近完成,但結束時是無限循環,或者吐出存在的文件。

我需要想出一個解決方案,將很容易告訴我哪些數字或文件名缺失。在我的夢想世界中,我會喜歡一個腳本,我可以將它放在父目錄中,它將抓取所有子目錄並打印丟失的單個文件。

不必告訴腳本文件名稱的開始部分是什麼,因爲理論上它只應該看看最後四個數字是否存在於0000-9999之間。

由於這是我的第一篇文章,我希望通過創建一個新主題來正確地做到這一點,我將把我的問題添加到前一個主題,直到我在郵箱中看到「但是避免...」。

回答

6

讓我們看看你是否可以寫一些代碼。

  • FOR /L可以指望從0到9999
  • IF NOT EXIST如果文件丟失可以測​​試,它支持通配符。
  • >>>可以輸出重定向到一個文件

爲了您的夢幻世界:

  • FOR /D /R %%F IN (.)會遍歷整個文件夾層次

編輯

你PROBA bly將需要留下填充零的數字,以便寬度始終爲4位數。由於這可能會在一個循環內,您將需要使用延遲擴展。假設%% N是一個包含數字的FOR變量。

set num=000%%N 
set num=!num:~-4! 
+0

學徒的風格看起來很棒。 – blueray 2018-02-19 07:35:37

1

這裏是一個腳本,會發現在一個連續序列中的所有丟失的文件:

@echo off 

setlocal ENABLEDELAYEDEXPANSION 
set max=1208 
set cnt=0 

for /L %%f in (0,1,%max%) do (
    set "num=00000%%f"  
    set "num=!num:~-4!" 
    if not exist "img!num!.png" (
     echo img!num!.png 
     set /A "cnt=!cnt!+1" 
    ) 
) 
echo NUMBER MISSING: !cnt! 

endlocal 

你需要使用!x!而不是%x%獲得本地變量延遲循環內的通知。

+0

在循環之前的'set'語句中,在等號之前或之後不能有空格。它應該是:'set max = 1208'和'set cnt = 0'。 – 2016-11-02 23:12:28