2012-12-13 48 views
1

我是一個完整的新手腳本。我想知道是否有人會幫我創建一個腳本。我正在查找的腳本是執行查找和移動過程的批處理文件。該查找將在dicom文件中搜索文本字符串(示例患者ID)。此外,查找也需要在子文件夾中搜索。此外,查找將查找的文件擴展名爲.dcm或.raw。一旦查找完成並找到包含文本字符串的文件。我想要腳本,然後將它找到的文件複製到桌面上。任何幫助,將不勝感激。腳本執行搜索和文件複製

+1

漂亮類似於http:// stackoverflow.com/questions/8750206/vbscript-to-find-and-move-文件 - 自動呢? – RhysW

回答

1

這應該爲你做。要查看命令行中每個命令類型command /?的所有可用選項。

echo /? 
for /? 
find /? 
xcopy /? 
findstr /? 
... 

方法1:(推薦)

:: No delayed expansion needed. 
:: Hide command output. 
@echo off 
:: Set the active directory; where to start the search. 
cd "C:\Root" 
:: Loop recusively listing only dcm and raw files. 
for /r %%A in (*.dcm *.raw) do call :FindMoveTo "patient id" "%%~dpnA" "%UserProfile%\Desktop" 
:: Pause the script to review the results. 
pause 
goto End 

:FindMoveTo <Term> <File> <Target> 
:: Look for the search term inside the current file. /i means case insensitive. 
find /c /i "%~1" "%~2" > nul 
:: Copy the file since it contains the search term to the Target directory. 
if %ErrorLevel% EQU 0 xcopy "%~2" "%~3\" /c /i /y 
goto :eof 

:End 

方法2:(不推薦由於FINDSTR /s bug

@echo off 
for /f "usebackq delims=" %%A in (`findstr /s /i /m /c:"patient id" *.dcm`) do xcopy "%%~dpnA" "%UserProfile%\Desktop\" /c /i /y 
for /f "usebackq delims=" %%A in (`findstr /s /i /m /c:"patient id" *.raw`) do xcopy "%%~dpnA" "%UserProfile%\Desktop\" /c /i /y 
pause 
+1

方法2可能會給出不正確的結果,因爲有關8.3短文件名的討厭的FINDSTR錯誤。有關更多信息,請參見[Windows FINDSTR命令的未記錄功能和限制?](http://stackoverflow.com/q/8844868/1012053)。 – dbenham

+0

@dbenham謝謝,我還沒有看到這篇文章。我會將其添加到我的答案中。 –

3
setlocal enabledelayedexpansion 
for /r C:\folder %%a in (*.dcm *.raw) do (
find "yourstring" "%%a" 
if !errorlevel!==0 copy "%%a" "%homepath%\Desktop" /y 
) 
+2

+1 - 您可能想要抑制FIND的輸出。也不需要延遲擴展。 (* .dcm * .raw)do> nul找到「yourstring」「%% a」&& copy「%% a」「%homepath% \桌面「/ y' – dbenham

+0

謝謝,是的,一個班輪是偉大的,它節省了延遲擴張的需要。 –