2010-01-06 27 views
17

Tôi muốn tìm một chuỗi trong một tập tin sử dụng hệ điều hành DOS:DOS: tìm một chuỗi, nếu tìm thấy sau đó chạy một kịch bản

Ví dụ

tìm "chuỗi" status.txt

Và khi nó được tìm thấy, tôi muốn chạy một tập tin thực thi.

Cách tốt nhất để làm điều này là gì?

+0

Liệu 'find' trở lại khác nhau giá trị 'errorlevel' tuỳ thuộc vào việc các chuỗi được tìm thấy? Nếu vậy, có giải pháp của bạn ngay tại đó. –

+2

Bạn có thực sự có nghĩa là MS-DOS hoặc bạn có nghĩa là thông dịch viên hàng loạt cmd.exe trên Windows? –

Trả lời

5
@echo off 
cls 
MD %homedrive%\TEMPBBDVD\ 
CLS 
TIMEOUT /T 1 >NUL 
CLS 
systeminfo >%homedrive%\TEMPBBDVD\info.txt 
cls 
timeout /t 3 >nul 
cls 
find "x64-based PC" %homedrive%\TEMPBBDVD\info.txt >nul 
if %errorlevel% equ 1 goto 32bitsok 
goto 64bitsok 
cls 

:commandlineerror 
cls 
echo error, command failed or you not are using windows OS. 
pause >nul 
cls 
exit 

:64bitsok 
cls 
echo done, system of 64 bits 
pause >nul 
cls 
del /q /f %homedrive%\TEMPBBDVD\info.txt >nul 
cls 
timeout /t 1 >nul 
cls 
RD %homedrive%\TEMPBBDVD\ >nul 
cls 
exit 

:32bitsok 
cls 
echo done, system of 32 bits 
pause >nul 
cls 
del /q /f %homedrive%\TEMPBBDVD\info.txt >nul 
cls 
timeout /t 1 >nul 
cls 
RD %homedrive%\TEMPBBDVD\ >nul 
cls 
exit 
26

Nó được một lúc kể từ khi tôi đã làm bất cứ điều gì với các tập tin batch nhưng tôi nghĩ rằng các công việc sau:

find /c "string" file 
if %errorlevel% equ 1 goto notfound 
echo found 
goto done 
:notfound 
echo notfound 
goto done 
:done 

Đây thực sự là một bằng chứng của khái niệm; làm sạch vì nó phù hợp với nhu cầu của bạn. Điều quan trọng là find trả lại một số errorlevel của 1 nếu string không có trong file. Chúng tôi chi nhánh đến notfound trong trường hợp này nếu không chúng tôi xử lý trường hợp found.

+0

Cảm ơn Điều này đã giúp ích rất nhiều – Manjot

+0

Tốt hơn nên sử dụng 'if errorlevel 1'. Tuy nhiên, nó có ngữ nghĩa hơi khác nhau, nhưng tổng thể mạnh mẽ hơn. – Joey

9
C:\test>find /c "string" file | find ": 0" 1>nul && echo "execute command here" 
+2

Đây là cách tiếp cận ban đầu của tôi nhưng tôi không thích dựa vào đầu ra của 'find' từ đó có chứa': 0'. Tôi không thể tìm thấy (tài liệu dự định chơi chữ) tài liệu hỗ trợ điều này và nghĩ rằng phương pháp 'errorlevel' có thể là bằng chứng tương lai hơn. – jason

+0

Tôi đã chỉnh sửa câu trả lời để thêm nút chuyển/c. Nếu không 'tìm' không báo cáo số (": 0") – Spikolynn

6

Chúng tôi có hai lệnh, trước tiên là "condition_command", thứ hai là "result_command". Nếu chúng ta cần chạy "result_command" khi "condition_command" thành công (errorlevel = 0):

condition_command && result_command 

Nếu chúng ta cần chạy "result_command" khi "condition_command" là thất bại:

condition_command || result_command 

Vì vậy cho chạy "some_command" trong trường hợp khi chúng ta có "chuỗi" trong file "status.txt":

find "string" status.txt 1>nul && some_command 

trong trường hợp khi chúng ta không có "chuỗi" trong file "status.txt":

find "string" status.txt 1>nul || some_command 
6

Như câu trả lời được đánh dấu chính xác thì đó là một kịch bản màn hình Windows Dos và điều này sẽ làm việc quá:

find "string" status.txt >nul && call "my batch file.bat" 
+0

quyền truy cập bị từ chối trên windows – Clayton

+0

@Jack Đó là vấn đề với quyền của bạn đối với tệp hoặc thư mục bạn đang sử dụng. – foxidrive

Các vấn đề liên quan