我很苦惱下面的搜索。 我需要查找錯誤文件夾中錯誤放置的文件。我有以下的測試結構(在現實中,它是文件夾的hudreds):findstr在win7批處理文件中的文件名
C:\test2\John\John_phone.txt
C:\test2\Mary\John_address.txt
C:\test2\Mary\Mary_address.txt
C:\test2\Mary\Mary_phone.txt
C:\test2\Mary\Peter_address.txt
John_address.txt和Peter_address.txt在瑪麗的文件夾中放錯位置的文件。我想檢查Mary的文件夾是否有任何錯位的文件,並將它們列在單獨的日誌文件中。因此,對於上面的例子,日誌將包含兩個錯位文件的名稱(路徑),決定標識符是該人的名字。我有這樣一段代碼:
@echo off
cls
set /p name="Specify the name: "
::forfiles /p "%CD%\%name%" /s /m *.* /c "cmd /c echo @path">>log.txt
forfiles /p "%CD%\%name%" /s /m "| findstr /i /v "\*%name%*"" /c "cmd /c echo @path">>log.txt
pause
的註釋行的FORFILES作品(列表中的文件夾中的所有文件),所以我有FINDSTR一個問題:錯誤:文件類型「| FINDSTR/I/V *瑪麗*「找不到。 帶有findstr的/ v開關應該找到所有不包含指定名稱的文件,但顯然我在將它用作forfiles的輸入時出錯。 我不想使用dir命令,因爲它列出了額外的信息,我需要將輸出集成到較大的日誌文件中(我只需要獲取錯位文件的路徑)。
任何幫助表示讚賞。 謝謝。
編輯:如果正確的文件名將被修復,編寫代碼會更容易嗎?
All_data_%NAME%_new.txt
的東西之前和之後的名稱將是固定的,文件名的格式將是唯一正確的選項,所以別的就紛紛予以報道。
嗨@ mc-nd,謝謝你的回答。這部分工作。以上批次僅列出c:\ test2 \ Mary \ John_address.txt,但它並未列出Peter_address.txt - Peter的文件夾不在根目錄中。此外,它應該工作列表文件,完全不正確的名稱像address_Mary.txt或Mray_address.txt。我可以使用(names_list.txt)中的for/f %% i來獲取列表中循環的正確名稱列表(...用戶無法更改文件夾名稱,但可以上傳他們想要的任何內容。我看到我應該早些指明這一點。謝謝。 – karl 2014-09-10 16:46:17
@karl,管道解決方案中出現了一個BIG錯誤,刪除了這個簡單的解決方案,可以毫無問題地工作,無論如何,我會盡力在最初的想法下解決它,謝謝。 – 2014-09-10 17:03:29
@karl,答案已更新。包含一個更靈活的文件/文件夾匹配。 – 2014-09-10 19:54:30