2015-05-20 68 views
0

希望你能幫助我。我需要編寫一個小批處理文件,該文件可以放在用戶pc上(不是一個非常有計算機能力的人)來檢查文件夾(這是從服務器共享的文件夾),並列出文件夾中與文件模式不匹配的文件。我有一個每天晚上運行的應用程序,但是這些文件必須命名爲*_*_*.*如果應用程序不是這種格式,應用程序將失敗,即使該應用程序會顯示某個文件不正確,但它們會浪費一天,如果它們再次犯錯......再過一天。他們需要能夠運行這個簡單的批處理文件,並且它可以在屏幕上顯示錯誤地命名的文件。在Windows 7批處理文件找到不匹配模式的文件

我開始閱讀有關forFiles函數,但一直未能弄清楚如何正確使用它。另外,我能否直接引用此共享文件夾?現在,如果我們訪問它,它看起來像這樣:\ dhpServer1 \ PeopleFolder。在這裏是應該檢查的文件。

非常感謝

回答

1

您可以生成文件的完整列表和過濾那些不符合要求的模式。

dir /b /a-d "\\dhpServer1\PeopleFolder\*" | findstr /v /r /c:"^[^_][^_]*_[^_][^_]*_.*" 

findstr將過濾dir命令的輸出,顯示出不匹配(/v)的正規表示(/r)表示(/c:)行:

^  at the start of the line 
[^_] a non underscore character 
[^_]* followed by zero or more non underscore characters 
_  followed by an underscore 
[^_] followed by a non underscore character 
[^_]* followed by zero or more non underscore characters 
_  followed by an underscore 
.* followed by any sequence of zero or more characters 

也許表達需要進行調整。這個表達式只是我的解釋(當然我可能是錯的),你寫的是*_*_*.*,但與dir命令中通配符的行爲不匹配。 "^[^_]*_[^_]*_.*"更接近所指示的通配符表達式的行爲。

+0

謝謝sooo多。創造奇蹟! – user990855

1
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir\t w o" 
SET "errorfound=" 
FOR /f "delims=" %%a IN (
    'dir /b /a-d "%sourcedir%\*" ' 
) DO (
SET "error=" 
FOR /f "tokens=1-3*delims=_" %%p IN ("q%%a") DO (
    IF "%%p" equ "q" SET error=Y 
    IF "%%s" neq "" SET error=Y 
    IF "%%r" equ "" SET error=Y 
    IF NOT DEFINED error (
    FOR /f "tokens=1,2*delims=." %%x IN ("q%%r") DO (
    IF "%%x" equ "q" SET error=Y 
    IF "%%y" equ "" SET error=Y 
    IF "%%z" neq "" SET error=Y 
    ) 
) 
    IF DEFINED error (
    ECHO %%a is invalid FORMAT 
    SET errorfound=y 
) ELSE (ECHO %%a is OK) 
) 
) 
IF DEFINED errorfound (
ECHO error found 
PAUSE 
) ELSE (
ECHO All OK! 
timeout /t 5 >nul 
) 
GOTO :EOF 

你需要改變的sourcedir設置,以滿足您的具體情況。

下面是一個示例輸出:

a_valid_file.name is OK 
_invalid_file.namestartingunderscore is invalid FORMAT 
an_invalid_file_name.toomanyundescores is invalid FORMAT 
invalid_file.nameinsufficientunderscores is invalid FORMAT 
an_invalid_.filenameterminalunderscoreinname is invalid FORMAT 
an_extra_invalid_.filenameterminalunderscoreinname is invalid FORMAT 
an_invalid_filenamewithnoextension is invalid FORMAT 
an_invalid_filenamewith.multiple.extensions is invalid FORMAT 
error found 
Press any key to continue . . . 

如果所有的文件都在有效的格式,程序應該表現出適當方面消息,5秒鐘和終止。

的原理是通過當_.被用作隔板tokenising和利用該if defined特性切換錯誤是否已發生上的一個實例,通過實例的基礎上向名稱的單獨的部分評估。

相關問題