2016-09-16 15 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 

が、私はそれが同じ名前の新しいフォルダに変更.txtファイルをコピーするsuppostだ出力%%~nc.txt部分を理解していません。

文字列"X".txtファイルの別の場所にあることを指摘したいと思います。

+0

'%%〜vc'が何であるか分かりません。 for /?をコマンドプロンプトウィンドウに入力し、ヘルプを読んでください。 '〜v'修飾子はありません(for %% v'ループもありません)。とにかく、アンバランスな括弧があるため、コードが不完全です...そして、あなたの要件のいくつかの文字を、テキストとしてここに入力するのではなく、テキストとして入力するのはどうですか? – aschipfl

+0

@aschipfl私は創造的であることが好きです。 'のためにありがとう/?'私はスクイズを取る。 – MALKAVIAN

+0

私の言う限りでは、画像は大文字ではなく、大文字の** ** **で表示されます。また、** 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 

、変更する必要がありますとdestdirの設定を適切に設定してmystringを適切に設定してください。findstrスイッチを調整する必要がある可能性があります大文字と小文字を区別するために、大文字と小文字を区別します。

もちろん、sourcedirなどを直接リテラルとしてコーディングすることもできますが、このようにすると、関連する文字列を1箇所で変更するだけで済みます。

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 
::************************************************************* 
関連する問題