2013-09-25 63 views
5

Hiểu biết của tôi là để có được ngày từ một tệp được chuyển vào một chương trình con làm đối số, bạn phải đặt lại đối số đó làm biến trong chương trình con. Điều này có đúng không? Điều này không thực hiện kể từ khi tôi, vì vậy tôi tự hỏi nếu tôi không hoàn toàn hiểu những gì đang xảy ra. Tôi có thể sử dụng đối số được truyền trong thực tế bất kỳ mã chương trình con nào khác ngoại trừ việc trích xuất ngày tháng.chương trình con của tập lệnh batch: Truyền đối số

set setupEXE=setup.exe 

CALL :SUB_CheckCorrectDate %setupEXE% 
GOTO EOF 
::---------------------------------- 

:SUB_CheckCorrectDate 
set filename=%1% 

:: SUCCESSFUL 
for %%x in (%filename%) do set FileDate=%%~tx 
@For /F "tokens=1-3 delims=-/ " %%A in ('@echo %FileDate%') do @( 
Set file_Month=%%A 
Set file_Day=%%B 
Set file_Year=%%C 
) 

:: GET ERROR  
for %%x in (%1%) do set FileDate=%%~tx 
@For /F "tokens=1-3 delims=-/ " %%A in ('@echo %FileDate%') do @( 
Set file_Month=%%A 
Set file_Day=%%B 
Set file_Year=%%C 
)  

GOTO:EOF 

:: ------------------ 
:EOF 

Trả lời

7

Sử dụng %1 để truy cập tham số, không %i%.

Biến đối số có cùng các công cụ sửa đổi như FOR biến, vì vậy bạn có thể sử dụng %~t1.

Không cần thực thi lệnh trong FOR/F của bạn. Nó đơn giản hơn để xử lý một chuỗi ký tự bằng cách sử dụng in ("string").

Không cần nhãn :EOF. Mỗi tập lệnh có một số ẩn là :eof. Thay vào đó, tôi thích sử dụng exit /b.

@echo off 
setlocal 
set "setupEXE=setup.exe" 

call :SUB_CheckCorrectDate "%setupEXE%" 
exit /b 

::---------------------------------- 

:SUB_CheckCorrectDate 
set "filename=%~1" 
for /F "tokens=1-3 delims=-/ " %%A in ("%~t1") do ( 
    set "file_Month=%%A" 
    set "file_Day=%%B" 
    set "file_Year=%%C" 
) 
exit /b 
+1

+1, Nhưng phần '% 1% đề cập đến một biến không tồn tại tên 1' rõ ràng là sai. Nó cũng đề cập đến '% 1' và sau đó mở rộng phần trăm mới bắt đầu, nhưng không thành công vì không có phần trăm đóng cũng như chữ số để truy cập tham số. Btw. Nó không thể mở rộng một variablename bắt đầu với một chữ số với một phần trăm mở rộng (bên trong tập tin batch) – jeb

1

nếu bạn nghiêm túc muốn viết kịch bản hàng loạt, bạn nên chăm sóc cho cú pháp:

@echo off &setlocal 
set "setupEXE=setup.exe" 

CALL :SUB_CheckCorrectDate "%setupEXE%" 
GOTO EOF 
::---------------------------------- 

:SUB_CheckCorrectDate 
set "filename=%~1" 

:: SUCCESSFUL 
for %%x in ("%filename%") do set "FileDate=%%~tx" 
For /F "tokens=1-3 delims=-/ " %%A in ("%FileDate%") do ( 
    Set "file_Month=%%A" 
    Set "file_Day=%%B" 
    Set "file_Year=%%C" 
) 

:: GET ERROR  
for %%x in ("%~1") do set "FileDate=%%~tx" 
For /F "tokens=1-3 delims=-/ " %%A in ("%FileDate%") do ( 
    Set "file_Month=%%A" 
    Set "file_Day=%%B" 
    Set "file_Year=%%C" 
)  

GOTO:EOF 

:: ------------------ 
: 
+0

okay, nhờ Endoro để được giúp đỡ. – Fractal