2016-09-16 72 views
-1

我有一個包含許多.txt文件的文件夾。我想在所有這些文件中找到字符串"X",然後我想將找到的字符串複製到.txt文件到另一個文件夾中。在多個.txt文件中查找字符串

到目前爲止,我曾嘗試:

@echo on 
findstr /m "X" "%userprofile%\Desktop\New_Folder\New_Folder\*.txt" 
if %errorlevel%==0 do (
for %%c in (*.txt) do (
type %%c >> "%UserProfile%\Desktop\New_Folder\%%~nc.txt" 
pause 

我不明白輸出%%~nc.txt部分是suppost的改變.txt文件複製到一個新的文件夾名稱相同。

我想指出字符串"X".txt文件的不同位置找到。

+0

我不知道'%%〜vc'是什麼;鍵入'for /?'到命令提示窗口並閱讀幫助;沒有'〜v'修飾符(也沒有'for %% v'循環)。無論如何,你的代碼是不完整的,因爲有不平衡的括號......那麼把你的需求中的幾個字符作爲文本輸入到這裏而不是將它們提供爲圖片呢? – aschipfl

+0

@aschipfl我喜歡創意。感謝'for /?'我會採取一個squiz。 – MALKAVIAN

+0

就我而言,圖像顯示的是非大寫的** x **,而不是大寫的** X **。此外,我會考慮** x **作爲一個字符,如果它僅出現在與空白相鄰的位置(string1 ** x ** string3),則只會成爲一個字符串。試圖制定有價值的解決方案時,這種信息至關重要。 – Compo

回答

1
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "mystring=x" 
FOR %%a IN ("%sourcedir%\*.txt") DO FINDSTR "%mystring%" "%%a">nul&IF NOT ERRORLEVEL 1 FINDSTR "%mystring%" "%%a">"%destdir%\%%~nxa" 

GOTO :EOF 

您將需要改變設置爲sourcedirdestdir以適合您的情況並適當設置mystring,注意您可能需要調整findstr開關以適應案件,文字和空間在目標字符串。

當然,您可以直接將sourcedir等編碼爲文字,但這樣做意味着相關字符串只需要在一個地方更改。

0

你接近了,但是檢查findstrErrorLevel沒有意義在這裏,因爲這反映了總的結果,即,ErrorLevel設置爲0的情況下,文件的任何包含搜索字符串。

我會用for /F循環解析的findstr /M輸出,並在人體內複製返回文件:

for /F "eol=| delims=" %%F in (' 
    findstr /M /I /C:"X" "%USERPROFILE%\Desktop\New_Folder\New_Folder\*.txt" 
') do (
    copy "%%F" "%USERPROFILE%\Desktop\New_Folder\" 
) 

這會將所有那些包含的文字搜索字符串(在不區分大小寫的方式)文件。

+0

[編輯](http://stackoverflow.com/revisions/39534388/2):增加了'/ I'開關來做不區分大小寫的搜索;添加'/ C'開關將搜索字符串視爲字面值; – aschipfl

+0

只是爲了說明這是OP詢問的問題,「我想在所有這些文件中找到字符串」X「,然後我想將找到的字符串複製到.txt文件中,並將其放入不同的文件夾中。」圖片要求將它們複製「只有字符串x」。我假設該問題要求使用匹配字符串的文件名進行復制,但這樣做目標文件只包含匹配字符串*(s)*。 – Compo

+0

@Compo,我同意,這是不是很清楚需要什麼;無論如何,我正在複製包含搜索字符串的所有文件... – aschipfl

2

此批處理文件可以做的伎倆(-_°)

所以,只要給一個嘗試:ScanfilesWordSearch_X.bat

@ECHO OFF 
::****************************************************************************************** 
Title Scan a folder and store all files names in an array variables 
SET "ROOT=%userprofile%\Desktop" 
Set "NewFolder2Copy=%userprofile%\Desktop\NewCopyTxtFiles" 
SET "EXT=txt" 
SET "Count=0" 
Set "LogFile=%~dp0%~n0.txt" 
set "Word2Search=X" 
SETLOCAL enabledelayedexpansion 
REM Iterates throw the files on this current folder and its subfolders. 
REM And Populate the array with existent files in this folder and its subfolders 
For %%a in (%EXT%) Do ( 
    Call :Scanning "%Word2Search%" "*.%%a" 
    FOR /f "delims=" %%f IN ('dir /b /s "%ROOT%\*.%%a"') DO (
     (find /I "%Word2Search%" "%%f" >nul 2>&1) && (
      SET /a "Count+=1" 
      set "list[!Count!]=%%~nxf" 
      set "listpath[!Count!]=%%~dpFf" 
     ) 
    ) || (
      (Call :Scanning "%Word2Search%" "%%~nxf") 
    ) 
) 
::*************************************************************** 
:Display_Results 
cls & color 0B 
echo wscript.echo Len("%ROOT%"^) + 20 >"%tmp%\length.vbs" 
for /f %%a in ('Cscript /nologo "%tmp%\length.vbs"') do (set "cols=%%a") 
If %cols% LSS 50 set /a cols=%cols% + 20 
set /a lines=%Count% + 10 
Mode con cols=%cols% lines=%lines% 
ECHO ********************************************************** 
ECHO Folder:"%ROOT%" 
ECHO ********************************************************** 
If Exist "%LogFile%" Del "%LogFile%" 
rem Display array elements and save results into the LogFile 
for /L %%i in (1,1,%Count%) do (
    echo [%%i] : !list[%%i]! 
    echo [%%i] : !list[%%i]! -- "!listpath[%%i]!" >> "%LogFile%"  
) 

( 
    ECHO. 
    ECHO Total of [%EXT%] files(s^) : %Count% file(s^) that contains the string "%Word2Search%" 
)>> "%LogFile%" 
ECHO(
ECHO Total of [%EXT%] files(s) : %Count% file(s) 
echo(
echo Type the number of file that you want to explore 
echo(
echo  To save those files just hit 'S' 
set /p "Input=" 
For /L %%i in (1,1,%Count%) Do (
    If "%INPUT%" EQU "%%i" (
     Call :Explorer "!listpath[%%i]!" 
    ) 
    IF /I "%INPUT%"=="S" (
     Call :CopyFiles 
    ) 
) 
Goto:Display_Results 
::************************************************************** 
:Scanning <Word> <file> 
mode con cols=75 lines=3 
Cls & Color 0E 
echo(
echo   Scanning for the string "%~1" on "%~2" ... 
goto :eof 
::************************************************************* 
:Explorer <file> 
explorer.exe /e,/select,"%~1" 
Goto :EOF 
::************************************************************* 
:MakeCopy <Source> <Target> 
If Not Exist "%~2\" MD "%~2\" 
Copy /Y "%~1" "%~2\" 
goto :eof 
::************************************************************* 
:CopyFiles 
cls 
mode con cols=80 lines=20 
for /L %%i in (1,1,%Count%) do (
    echo Copying "!list[%%i]!" "%NewFolder2Copy%\" 
    Call :MakeCopy "!listpath[%%i]!" "%NewFolder2Copy%">nul 2>&1 
) 
Call :Explorer "%NewFolder2Copy%\" 
Goto:Display_Results 
::************************************************************* 
相關問題