Câu hỏi Làm cách nào để cho phép người dùng chọn thư mục được sao chép?


Tôi đang cố gắng viết một tập tin thực thi về cơ bản được sử dụng để sao chép các đích. Bây giờ, tôi muốn làm cho nó đến nơi mà những người khác có thể sử dụng nó mà không cần phải đi vào và chỉnh sửa các thư mục và điểm đến. Có cách nào để tôi viết các tập tin thực thi vào nơi mà nó nhắc, yêu cầu cho các thư mục người dùng muốn sao chép, và để yêu cầu các ổ đĩa mà người dùng muốn sao chép nó vào?

Đây là những gì tôi đã sử dụng trong một thời bây giờ.

@echo off
:: variable
set backupdir="Destination"
set backupcmd=xcopy /e /h /f /y /v /c /i /r /g /k /d
echo.
echo +++ Backing Up Data +++
echo.
echo.
%backupcmd% "Directory\*.*" "%backupdir%\Data"
timeout /t 2
cls
echo Backup Complete
echo.
echo.
timeout /t 2
cls
echo.
echo +++ Now taking hidden and system attributes off of folders +++
echo.
echo.
echo.
attrib -s -h "Destination\Data"
echo.
echo.
timeout /t 3

Và có cách nào để tôi có thể cải thiện điều này bằng cách sử dụng xcopy không?


0
2017-12-05 17:44


gốc


Kiểu set /? và xem cách sử dụng SET /P variable=[promptString] để có được đầu vào của người dùng. - Karan
các tham số dòng lệnh cũng được tham chiếu %0 (đối với chương trình hoặc lệnh thực tế được gọi) và %1-%9 cho các tham số được truyền. Vì vậy, bạn có thể tạo một tập tin batch mới với dòng call backup.bat c:\source c:\destination Và sử dụng %1 để tham khảo nguồn và %2 để tham chiếu đích đến. Không phải là câu trả lời bởi vì nó không xử lý lời nhắc. Robocopy là một công cụ tuyệt vời cũng như cho các mục đích sao lưu và là tiêu chuẩn trên windows 7 cài đặt. - horatio


Các câu trả lời:


Có một vài lựa chọn:

1) Sử dụng các đối số dòng lệnh.

Người dùng sẽ chạy nó như backup.bat c:\SourcePath d:\DestinationPath

Sau đó sử dụng% 1 và% 2 (v.v.) trong tập tin thực thi để sử dụng các đối số đã cho.

Cái gì đó như

set backupdir=%2

%backupcmd% "%1\*.*" "%backupdir%\Data"

Thêm thông tin: Làm thế nào để vượt qua tham số dòng lệnh trong tập tin hàng loạt

2) Sử dụng chức năng Prompt (/P) của Set để nhắc người dùng cung cấp thông tin để điền biến với:

Thí dụ: SET /P variable=[promptString]

Vì vậy, bạn có thể làm một cái gì đó như:

set /P backupdir="Enter Destination Path: "
set /P sourcedir="Enter Source Path: "

Khi đến các dòng đó, nó sẽ dừng và nhắc người dùng nhập liệu.

Thông tin thêm từ set /?:

Chuyển đổi / P cho phép bạn đặt giá trị của biến thành một dòng   đầu vào được người dùng nhập. Hiển thị promptString được chỉ định trước   đọc dòng đầu vào. PromptString có thể trống.


1
2017-12-05 18:16





Bạn có thể dùng set / p

Một ví dụ từ http://ss64.com/nt/set.html

@echo off
Set /P _dept=Please enter Department || Set _dept=NothingChosen
If "%_dept%"=="NothingChosen" goto :sub_error
If /i "%_dept%"=="finance" goto sub_finance
If /i "%_dept%"=="hr" goto sub_hr
goto:eof

Sử dụng liên kết ở trên để xem các tùy chọn và ví dụ khác. bạn cũng có thể làm Set /? trong dấu nhắc lệnh để xem các tùy chọn.

Hãy ghi nhớ, các tập tin batch tương tác trở nên lộn xộn thực sự nhanh và bạn có thể muốn xem xét các cách lập trình khác tùy thuộc vào mức độ phức tạp của kịch bản của bạn và đối tượng mục tiêu là ai. Nếu bạn đã quen thuộc với VB, VBScript có thể đơn giản hơn để lập trình và CScript có thể được sử dụng để chạy nó trên dòng lệnh.


0
2017-12-05 18:15