Batch Script - Input / Output (tiếng Việt)

Xin chào các bạn future programmers! Hôm nay, chúng ta sẽ khám phá thế giới thú vị của Batch scripting, tập trung vào các thao tác đầu vào và đầu ra. Là giáo viên máy tính hàng xóm thân thiện của bạn, tôi rất vui mừng được hướng dẫn bạn trong hành trình này. Đừng lo lắng nếu bạn chưa bao giờ viết một dòng mã trước đây - chúng ta sẽ bắt đầu từ cơ bản và dần dần nâng cao. Vậy, hãy lấy một ly đồ uống yêu thích của bạn, và chúng ta cùng bắt đầu!

Batch Script - Input / Output

Hiểu về Đầu vào và Đầu ra trong Batch Scripts

Trước khi chúng ta đi vào chi tiết, hãy nói về đầu vào và đầu ra trong ngữ cảnh của Batch scripts.

  • Đầu vào là thông tin mà bạn đưa vào script của mình. Nó giống như cung cấp dữ liệu cho chương trình của bạn.
  • Đầu ra là những gì script của bạn tạo ra hoặc hiển thị. Nó là kết quả của công việc của script.

Hãy tưởng tượng như một căn bếp: đầu vào là nguyên liệu bạn sử dụng, và đầu ra là bữa ăn ngon lành bạn tạo ra!

Đầu vào Cơ bản: Lệnh SET /P

Hãy bắt đầu với cách phổ biến nhất để lấy đầu vào trong Batch scripts: lệnh SET /P. Lệnh này cho phép chúng ta yêu cầu người dùng nhập liệu và lưu trữ nó trong một biến.

@echo off
SET /P name=What's your name?
echo Hello, %name%! Welcome to the world of Batch scripting!
pause

Trong ví dụ này:

  1. @echo off ngăn không cho các lệnh hiển thị trên màn hình.
  2. SET /P name=What's your name? yêu cầu người dùng nhập tên và lưu trữ nó trong biến name.
  3. echo Hello, %name%! hiển thị lời chào sử dụng tên đã nhập.
  4. pause giữ cửa sổ mở để bạn có thể thấy kết quả.

Hãy thử chạy script này. Nó giống như bạn đang có một cuộc trò chuyện nhỏ với máy tính của bạn!

Đầu ra Cơ bản: Lệnh ECHO

Chúng ta đã thấy lệnh ECHO trong hành động. Nó là cách chính để hiển thị đầu ra trong Batch scripts. Hãy khám phá nó một chút thêm:

@echo off
echo This is a simple output.
echo.
echo This line has a blank line above it.
echo "Quotes" are displayed as is.
echo.
echo Current date: %date%
echo Current time: %time%
pause

Đây là những gì đang xảy ra:

  • echo. in ra một dòng trống.
  • Chúng ta có thể sử dụng ECHO để hiển thị văn bản, biến và thậm chí là thông tin hệ thống như ngày và giờ.

Chuyển hướng Đầu ra (Stdout và Stderr)

Bây giờ, hãy nói về việc chuyển hướng đầu ra. Trong Batch scripting, chúng ta có hai loại đầu ra chính:

  1. Đầu ra Стандартный (stdout): Đầu ra bình thường của một lệnh.
  2. Đầu ra Lỗi (stderr): Thông báo lỗi hoặc đầu ra chẩn đoán.

Chúng ta có thể chuyển hướng các đầu ra này vào các tệp sử dụng các toán tử >>>.

Chuyển hướng Đầu ra Стандартный

@echo off
echo This will be saved to a file > output.txt
echo This will be appended to the file >> output.txt
type output.txt
pause

Trong script này:

  • > tạo (hoặc ghi đè) một tệp và ghi đầu ra vào nó.
  • >> thêm đầu ra vào tệp hiện có (hoặc tạo nó nếu không tồn tại).
  • type output.txt hiển thị nội dung của tệp.

Chuyển hướng Đầu ra Lỗi

Để chuyển hướng thông báo lỗi, chúng ta sử dụng 2> thay vì chỉ >.

@echo off
dir nonexistent_folder 2> error.txt
type error.txt
pause

Script này cố gắng liệt kê một thư mục không tồn tại và chuyển hướng thông báo lỗi vào một tệp.

Chuyển hướng Cả Stdout và Stderr

Chúng ta có thể chuyển hướng cả hai loại đầu ra vào cùng một tệp:

@echo off
dir 2>&1 > output.txt
type output.txt
pause

Ở đây, 2>&1 có nghĩa là "chuyển hướng stderr vào cùng nơi stdout".

SUPPRESSING Program Output

Đôi khi, bạn có thể muốn chạy một lệnh mà không hiển thị đầu ra của nó. Chúng ta có thể làm điều này bằng cách chuyển hướng đầu ra vào một thiết bị đặc biệt gọi là NUL.

@echo off
echo This will be displayed
echo This will not be displayed > NUL
dir > NUL
echo The directory listing was suppressed
pause

Trong script này, đầu ra của lệnh thứ hai và lệnh DIR bị 抑制.

Kỹ thuật Đầu vào/Đầu ra Cấp cao

Bây giờ chúng ta đã bao gồm các kỹ thuật cơ bản, hãy xem xét một số kỹ thuật cao cấp hơn.

Sử dụng CHOICE để Lấy Đầu vào của Người dùng

Lệnh CHOICE cung cấp một cách cấu trúc hơn để lấy đầu vào của người dùng:

@echo off
echo Do you like programming?
choice /c YN /m "Enter Y for Yes or N for No"
if errorlevel 2 goto No
if errorlevel 1 goto Yes
:Yes
echo Great! Let's learn more!
goto End
:No
echo Don't worry, you will love it soon!
:End
pause

Script này:

  1. Đưa ra một câu hỏi có hoặc không cho người dùng.
  2. Sử dụng /c YN để chỉ định các lựa chọn hợp lệ (Y hoặc N).
  3. Sử dụng /m để hiển thị một thông điệp tùy chỉnh.
  4. Sử dụng if errorlevel để kiểm tra lựa chọn của người dùng và nhảy đến nhãn tương ứng.

Đọc từ một Tệp

Chúng ta cũng có thể đọc đầu vào từ một tệp:

@echo off
for /f "delims=" %%a in (input.txt) do (
echo Line read: %%a
)
pause

Script này đọc mỗi dòng từ input.txt và hiển thị nó.

Ghi vào Nhiều Tệp

Hãy tạo một script ghi vào nhiều tệp:

@echo off
echo File 1 Content > file1.txt
echo File 2 Content > file2.txt
echo File 3 Content > file3.txt
echo Files created successfully!
pause

Điều này tạo ra ba tệp riêng biệt với nội dung khác nhau.

Tóm tắt các Phương pháp Đầu vào/Đầu ra

Hãy tóm tắt các phương pháp đầu vào/đầu ra chúng ta đã học trong bảng handy:

Phương pháp Mô tả Ví dụ
SET /P Lấy đầu vào của người dùng SET /P name=Enter name:
ECHO Hiển thị đầu ra echo Hello, World!
> Chuyển hướng đầu ra vào tệp echo Text > file.txt
>> Thêm đầu ra vào tệp echo More text >> file.txt
2> Chuyển hướng đầu ra lỗi command 2> error.txt
2>&1 Chuyển hướng cả stdout và stderr command > output.txt 2>&1
NUL 抑制 đầu ra command > NUL
CHOICE Đầu vào của người dùng cấu trúc choice /c YN /m "Yes or No?"
FOR /F Đọc từ tệp for /f "delims=" %%a in (file.txt) do ...

Và thế là xong, các bạn! Chúng ta đã cùng nhau hành trình qua thế giới đầu vào và đầu ra của Batch script. Nhớ rằng, chìa khóa để thành thạo các khái niệm này là thực hành. Hãy thử viết các script của riêng bạn, thử nghiệm với các lệnh khác nhau, và đừng sợ hãi khi mắc lỗi - đó là cách chúng ta học hỏi!

Như giáo viên máy tính cũ của bạn luôn nói, "Trong lập trình, mỗi lỗi chỉ là một cơ hội học tập mới trong trang phục." Vậy hãy tiến lên, viết các script Batch của bạn, và hy vọng rằng đầu ra của bạn luôn như mong đợi!

Credits: Image by storyset