Gửi các biến giữa các tệp với lô


1

Vì vậy, tôi có 2 tập tin Bat và A và B. A chạy, bây giờ tôi sử dụng một lệnh để bắt đầu B. Bây giờ A và B đang chạy cùng một lúc. Và bây giờ tôi muốn gửi Biến C của mình từ A đến B. Tôi đã thử Call nhưng sau đó nó chỉ mở B hai lần. Cảm ơn câu trả lời trong tương lai! Chỉnh sửa * không có tệp bổ sung


Hãy chắc chắn rằng không có Vấn đề XY đây. Nếu có, tuy nhiên, sau đó chỉnh sửa và giải thích mục tiêu thực sự.
Kamil Maciorowski

Tôi nghĩ bạn sẽ phải điều khiển logic tốt trong B và đặt chữ cái đầu set /p từ một tệp như được hiển thị trong câu trả lời của Sponge Bob thành mặc định khi ban đầu được khởi chạy và thêm logic có điều kiện vào đó để bảo nó chỉ thực hiện bất kỳ hành động nào bạn muốn nó thực hiện if not ["%var%"]==["%setVar%"] và sau đó nếu nó không bằng setVar để sau đó một cái gì đó và thiết lập setVar đến bất cứ điều gì bạn vừa chạy và sau đó bắt đầu kiểm tra logic điều kiện từ giá trị trong tệp cho đến khi nó thay đổi một lần nữa mà A có thể làm bất cứ khi nào. Điều này chắc chắn là có thể theo cách đó làm việc xung quanh giới hạn theo một cách.
Pimp Juice IT

@DavidPostill Tôi tin rằng Waitfor là một IPC rất hạn chế. Ít nhất là giữa các tập tin hàng loạt. Nó có thể là một câu trả lời nếu đây là một câu hỏi sai nhưng theo cách này đã được hỏi nó không phải là một câu trả lời
Ross

Câu trả lời:


2

Lệnh setx ghi một biến vào sổ đăng ký và có thể được sử dụng nếu bạn muốn sử dụng một biến trên toàn cầu cho tất cả các tệp bó.

SETX VAR_C somevalue

Ngoài ra, bạn có thể viết biến vào một tệp và đọc lại vào tệp bó khác tức là;

Tập tin hàng loạt A:

SET VAR_C=somevalue
ECHO %VAR_C% >%TMP%\var_c

Batch tập tin B:

SET /P VAR_C=<%TMP%\var_c
ECHO %VAR_C%

Setx sẽ không giúp với các đợt đã chạy. Một lô kế thừa môi trường từ quá trình bắt đầu và sẽ không nhận ra những thay đổi trong khi đó đối với môi trường chính.
LotPings

Tôi nghĩ bạn sẽ phải điều khiển logic tốt trong B và đặt chữ cái đầu set /p từ một tệp như được hiển thị trong câu trả lời của Sponge Bob thành mặc định khi ban đầu được khởi chạy và thêm logic có điều kiện vào đó để bảo nó chỉ thực hiện bất kỳ hành động nào bạn muốn nó thực hiện if not ["%var%"]==["%setVar%"] và sau đó nếu nó không bằng setVar để sau đó một cái gì đó và thiết lập setVar đến bất cứ điều gì bạn vừa chạy và sau đó bắt đầu kiểm tra logic điều kiện từ giá trị trong tệp cho đến khi nó thay đổi lại mà A có thể làm bất cứ khi nào. Điều này chắc chắn là có thể theo cách đó làm việc xung quanh giới hạn theo một cách.
Pimp Juice IT

Lệnh 'reg query' có thể được sử dụng để đọc các giá trị đăng ký khi tệp bó đang chạy.
5p0ng3b0b

0

Nếu bạn không sử dụng dấu nhắc lệnh windows chạy a và b cùng một lúc là không thể. Ngay cả với lệnh gọi một là dừng lại và b chạy đến khi hoàn thành một sau lệnh gọi trong DOS thực.

Khi chạy trong dấu nhắc lệnh windows, chúng là 2 tiến trình hoàn toàn khác nhau và không chia sẻ bộ nhớ, biến hoặc v.v.

Cách thức hoạt động của các tệp bó là họ sử dụng% 1 đến% 9

ca cho phép sử dụng 10 giá trị trở lên bằng cách thay đổi mọi thứ xuống 1 và mất giá trị thấp nhất.

Vì vậy, bên trong của a.bat gọi b.bat "scooby doo" "là" "đây"

Bây giờ bên trong b.bat

%1 = "scooby doo"
%2 = "was"
%3 = "here"

thay thế

Các BỘ lệnh cũng tồn tại

đặt C = "scooby doo"

tiếng vang% c%


Từ bộ phận xấu xí, hạn chế và hacky

mkdir "\ chia sẻ" mkdir "\ chia sẻ \ c" và sau đó trong tập tin lô một bạn có thể tạo một tệp có tên bất cứ điều gì bạn muốn chia sẻ.

lưu ý: bên trong một tệp bó có thể cần gấp đôi ký hiệu phần trăm.

for  %i in ("c:\x\c\*.*"); do set c="%~ni"

Tuy nhiên, sau đó bạn không thể sử dụng các ký tự đặc biệt, ví dụ như khoảng thời gian.


@KamilMaciorowski Tôi đã thêm một thay thế. Tuy nhiên DOS rất hạn chế trong những gì nó có thể làm. Tùy thuộc vào cách b đã được bắt đầu không có cách nào được đảm bảo để làm việc. Tốt nhất nếu b không bắt đầu trước khi bàn tay thì các biến sẽ chuyển. Nếu một b được bắt đầu trong 2 cửa sổ lệnh khác nhau, chúng là các tiến trình hoàn toàn khác nhau và không chia sẻ bất kỳ không gian bộ nhớ nào.
cybernard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.