返回列表 回復 發帖

[提問] bat做得到嗎?

本帖最後由 a8092947 於 2010-2-20 12:46 編輯

首先我先po一段批次檔的語法
此批次檔的名稱叫做"呼叫編譯器"
  1. @echo off
  2. \WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc /target:exe /recurse:.. %1
  3. call %1
  4. ERASE %1.exe
複製代碼
然後我用筆記本寫一段程式另存檔名為test,之後刪去副檔名

好問題來了
為什麼我用cmd來執行
C:\Documents and Settings\***\桌面\新資料夾>呼叫編譯器 test
此批次檔可以成功的呼叫編譯出來的exe檔案
而且測試完批次檔還可以成功的Erase掉我測試過的檔案

可是當我用滑鼠拖曳test去撞"呼叫編譯器"這個批次檔時
看編譯器的狀況是沒有出任何的錯誤
可是批次檔卻沒辦法成功的呼叫編譯出來的exe檔案
而且測試完批次檔也不能Erase掉我測試過的檔案

請問各位大大這是為什麼呢?
板大重複發文囉  改一下吧
  1. @echo off
  2. \WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc /target:exe /recurse:.. "%1"
  3. call "%1"
  4. ERASE "%1.exe"
複製代碼
try it.
3# JRS

大大我踹了還是失敗@@

call時會出現
'""C:\Documents' 不是內部或外部命令、
可執行的程式或批次檔。

ERASE時會出現
系統找不到指定路徑
2# dda228tw


我不會用= ='
因為要呼叫及刪除的檔案路徑不對, 在 cmd 時有在該程式路徑下跑, 所以不會有錯,
所以還要加上指定的路徑才行
本帖最後由 JRS 於 2010-2-23 17:44 編輯

剛剛試了一下發現 XP 如果路徑中有空白會在兩旁自動加上雙引號, 所以應該不是空白的問題

感覺是 recurse 後面路徑的問題
  1. @echo off
  2. set out="%temp%\%random%.exe"
  3. %WinDir%\Microsoft.NET\Framework\v2.0.50727\csc /t:exe /out:%out% /recurse:%cd% %1
  4. call %out%
  5. ERASE %out%
複製代碼
如果有編譯成功應該就沒問題。
7# JRS


多謝大大
可是報告大大小弟知識淺薄不太懂那些%%的意思
可不可以拜託大大幫我解釋一下每一行的意思
謝謝
本帖最後由 JRS 於 2010-2-25 19:23 編輯

@echo off
不顯示命令提示訊息
set out="%temp%\%random%.exe"
宣告一個變數 set, 內容為 "%temp%\%random%.exe" (包含雙引號)

%temp% 會自動替代成你的暫存資料夾路徑, %random% 則是隨機輸出一個亂數
%WinDir%\Microsoft.NET\Framework\v2.0.50727\csc /t:exe /out:%out% /recurse:%cd% %1
%WinDir% 會自動替換成系統資料夾路徑

另外加上一個 /out 參數, 指定輸出的檔案直接存到 %out%, %out% 會自動替換成
上面宣告的那個路徑

在命令提示字元輸入 set 可以看到所有環境變數
TEMP=C:\DOCUME~1\使用者名稱\LOCALS~1\Temp          XP 的暫存路徑
TEMP=C:\Users\使用者名稱\AppData\Local\Temp             Vista 以上的暫存路徑
windir=C:\Windows
附註: XP 的暫存路徑中的 ~1
8.3 格式檔案名稱
DOCUME~1 = Documents and Settings
LOCALS~1 = Local Settings

本帖最近評分記錄(1)
  •   js155036GP + 2 感謝教學,回覆辛苦了
9# JRS


多謝大大,我學到了很多:)
返回列表