2017-02-17 45 views
0

在試圖找到一種方法來檢查目錄中的文件檢查的文件,我發現這一點:只在特定的子目錄

>nul 2>nul dir /a-d /s "folderName\*" && (echo Files exist) || (echo No files found) 

它的工作原理,只是我真的需要能夠只檢查不夠好一半遵循特定命名約定的子目錄。

enter image description here

反正是有返工此行只在「ToBeMoved」文件夾檢查?

我試着寫這樣說:

>nul 2>nul dir /a-d/b/s "\\SERVER\Path\*ToBeMoved" && (echo Files exist) || (echo No files found) 

但它不工作。我猜測是因爲它在字符串「ToBeMoved」中查找用戶級別的文件夾。

+0

你可以使用'FOR/d/R'命令來獲取ToBeMoved目錄的列表,然後檢查該目錄是空的或不是。 – Squashman

+0

除非您添加'/ b'選項,否則您的第一個代碼無法像您所描述的那樣工作。 – dbenham

回答

1

我相信第一個代碼,您列表中缺少/b選項。假設它實際上在那裏,那麼你的原始代碼列出了目錄層次結構中每個文件的完整路徑,但你指示輸出爲空,並根據是否找到文件有條件地採取行動。

而不是重定向爲空,您可以簡單地管道到FIND,邏輯上尋找包含*ToBeMoved\的路徑。該輸出可以重定向爲空,並且可以根據FIND返回碼有條件地採取行動。查找字符串時我會忽略大小寫。

dir /b /a-d /s "folderName" 2>nul|find /i "ToBeMoved\" >nul && (echo Files exist) || (echo No files found) 

你可以使用FINDSTR代替,但反斜槓必須轉義

dir /b /a-d /s "folderName" 2>nul|findstr /i "ToBeMoved\\" >nul && (echo Files exist) || (echo No files found) 
+0

對此做了一些測試後,因爲它似乎不起作用,我發現在一些子目錄中存在一個名爲「Thumb.db」的文件。這似乎是一個隱藏的文件,有沒有辦法讓這忽略隱藏的文件? – Neal

+0

沒關係,'/ a-h' – Neal

1

試試這個。使用PUSHD命令更改您需要的根路徑。

@echo off 

PUSHD "H:\users" 
FOR /F "delims=" %%G IN ('dir /ad /b /s ToBeMoved') DO (
    pushd "%%~G" 
    >nul 2>nul dir /a-d/b/s && (echo Files exist in %%~G) || (echo No files found in %%~G) 
    popd 
) 
popd 
pause 

輸出給我。

No files found in H:\users\johndoe\ToBeMoved 
No files found in H:\users\maryjane\ToBeMoved 
Files exist in H:\users\UserWithFiles\ToBeMoved 
Press any key to continue . . . 

編輯: 只是爲了顯示你,我確實有一個名爲文件夾中的文件ToBeMoved我跑從提示在cmd的目錄。我只放了一個文件進行測試。

H:\users>dir /a-d/b/s 
H:\users\UserWithFiles\ToBeMoved\moveme.txt 
+0

我很困惑,我從來沒有使用pushd函數。你在哪裏將腳本指向特定的目錄樹?我用'\\ SERVER \ Path \ Users \'替換了'H:\ users',它沒有給我任何相同的輸出。'沒有找到文件'按任意鍵繼續。 ' – Neal

+0

@Neal Correct。你把你的根路徑和PUSHD命令放在一起,它可以是UNC路徑或帶有路徑的驅動器盤符。聽起來像你沒有測試我的確切代碼,因爲你應該看到它回聲**在文件夾路徑中找不到任何文件**。 – Squashman

+0

我直接從答案中複製並粘貼了文件,並替換了路徑。我已多次檢查過它,但總是得到相同的輸出。 – Neal

相關問題