2015-10-23 54 views
0

我在搜索字符串「@ B-ADD | 496 |」在我的主文件夾及其子文件夾中。但是,下面的腳本無法搜索我的子文件夾。 請好心幫Windows批處理腳本:搜索文件夾和子文件夾內的字符串

FOR /F "tokens=*" %%A IN ('findstr /S "@B-ADD|496|" C:\Users\william\Desktop\New Folder\*.txt') DO (
    move "C:\Users\wee-liem.wong\Desktop\New Folder\*.txt" "C:\Users\william\Desktop\New Folder (2)" 
) 

pause 
+0

您正在搜索什麼字符串?路徑或文件名或文件內容?請澄清! – aschipfl

+0

在txt文件中搜索字符串。路徑:C:\ Users \ william \ Desktop \ NewFolder \;子文件夾:C:\ Users \ william \ Desktop \ NewFolder \ test \ – william123456

+0

請通過編輯帖子將此信息添加到您的問題中......謝謝! – aschipfl

回答

1

findstr

你的路徑包含空格。您在move命令中正確地引用了它們,但在findstr命令中沒有正確引用它們。如果沒有引號,則找不到要搜索的路徑,因此無法找到文件。

如果要處理髮現包含該字符串的文件列表,則需要向findstr指示不希望找到文本,只能找到文本名稱所在的文件名。在findstr中使用的開關包括/M

另外,取決於字符串的內容,findstr將不會像您所期望的那樣工作。某些字符會將搜索字符串處理爲正則表達式或將其分割爲空格。指出搜索是什麼更好。

因此,findstr應該是這個樣子

findstr /s /m /l /c:"@B-ADD|496|" "C:\Users\william\Desktop\New Folder\*.txt" 

子目錄中搜索(/s)只返回文件名(/m)的文字(/l但在這種情況下,可以爲/c意味着默認的字符串被忽略文字)所指示的字符串(/c:"....."

for /f

隨着findstr命令更正,您將檢索將由for /f迭代的匹配文件列表。如果您只想移動僅限於這些找到的文件,則在move命令的源文件中包含完整路徑和通配符是沒有意義的。您應該使用源"%%~fA"來檢索for可替換參數(您的代碼中爲%%A)引用的元素的完整路徑,即找到的文件的完整路徑。

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "source=C:\Users\wee-liem.wong\Desktop\NewFolder" 
    set "target=C:\Users\william\Desktop\NewFolder(2)" 

    if not exist "%target%\" md "%target%\" 

    for /f "delims=" %%A in (' 
     findstr /s /m /l /c:"@B-ADD|496|" "%source%\*.txt" 
    ') do move /y "%%~fA" "%target%" 
+0

嗨,感謝您的評論, 我對它做了一些修改。然而,仍然無法找到我的子文件夾 主:C:\ Users \ wee-liem.wong \ Desktop \ NewFolder \; 子文件夾:C:\ Users \ wee-liem.wong \ Desktop \ NewFolder \ Test \; FOR/F「tokens = *」%% A IN('findstr/s/m/l/c:「@ B-ADD | 496 |」「C:\ Users \ william \ Desktop \ NewFolder \ *。 txt「')DO( ) 暫停 – william123456

+0

@(」C:\ Users \ william123456,您的更改遺漏了反斜槓和關於'for'可替換參數引用的部分。包括代碼,以適應您的需求。 –

+0

謝謝,代碼很好 – william123456

相關問題