iT邦幫忙

0

如何寫判斷的BAT批次檔

  • 分享至 

  • xImage

各位大大請教~
語法新手網路爬文寫的批次檔,主要是需要從AD拉資料過來並安裝,
第一次測試已正常,第二次測試掃描到有create這個資料夾就不會拉資料,但還是會執行最後的批次檔。

請問我可以怎麼修改內容判斷已安裝不需執行。

https://ithelp.ithome.com.tw/upload/images/20230517/20136191GUfNhGTpGq.jpg

_shield_ iT邦新手 5 級 ‧ 2023-05-17 17:55:50 檢舉
因為最後呼叫批次檔那行batch沒有寫在if else判斷式中,看是不是把它挪到判斷式裡面,或是用Goto的寫法
哦~ 有吔,拉進判斷式裡就可以略過了,感謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
re.Zero
iT邦研究生 5 級 ‧ 2023-05-17 21:01:40
最佳解答

你的貼圖內容, 是問 ChatGPT 之類的東東而產生後的內容嗎? 真是讓我…… ( 是用怎樣的 prompt? )
建議你還是乖乖學 batch-script 或 PowerShell-script 。
( 剛剛隨便翻了下, 你可以看看 DOS 不死 :: 2010 iT 邦幫忙鐵人賽 , 先有個基礎概念; 若想看點進階的, 私人小推 Windows CMD Shell How-to guides and examples 。 )

以下,給你個參考:
( 一堆註解是因為從你的貼圖感覺你好像連基礎都有問題, 就通通寫上去。 )

@rem ## echo off: 關掉命令的顯示;
@echo off
rem ## 設定複製的來源路徑給 mySrcPath 變數;
set "mySrcPath=\\path\to\source\folder"
rem ## 設定複製的目的路徑給 myDstPath 變數;
set "myDstPath=\\path\to\destination\folder"
rem ## 如果 myDstPath 變數的路徑不存在時;
if not exist "%myDstPath%" (
    rem ## 用 xcopy 把 mySrcPath 變數的路徑之內容拷貝至 myDstPath 變數的路徑之內;
    xcopy "%mySrcPath%" "%myDstPath%" /S /E /H /I
    rem ## 用 start 以新視窗 "runSetup" 執行 "%myDstPath%\setup.bat";
    start "runSetup" /WAIT "%myDstPath%\setup.bat"
) else (
    rem ## 提示 「myDstPath 變數的路徑已存在,略過拷貝作業;」
    echo [%myDstPath%] exist, pass the copying;
)
rem ## 提示結束;
echo Done;

另, 因為 start 命令在不用 "title" 選項 ( 程式碼的 "runSetup" ) 的時候, 若後面的 [command/program] 用上 " 含括時會被誤判, 所以我習慣加上 "title" 以避免誤判。


順便加贈 PowerShell 版本:
( PowerShell 基礎腳本編輯可使用 Windows 內建的 Windows PowerShell ISE; 只是要注意 Win-PS-ISE 被宣告只支援到 Win-PS-v5.1 , 往後不會支援新版的 PS 功能。 )

## 設定複製的來源路徑給 mySrcPath 變數;
$mySrcPath = '\\path\to\source\folder'
## 設定複製的目的路徑給 myDstPath 變數;
$myDstPath = '\\path\to\destination\folder'
## 如果 myDstPath 變數的路徑不存在時;
if(-not(Test-Path -Path $myDstPath)){
    ## 用 xcopy 把 mySrcPath 變數的路徑內容拷貝至 myDstPath 變數的路徑內;
    xcopy "$mySrcPath" "$myDstPath" /S /E /H /I
    ## 用 Start-Process 以新程序執行 "${myDstPath}\setup.bat";
    Start-Process "${myDstPath}\setup.bat" -Wait
}else{
    ## 提示 「myDstPath 變數的路徑已存在,略過拷貝作業;」
    Write-Host "[${myDstPath}] exist, pass the copying;"
}
## 提示結束;
Write-Host "Done;"

P.s.:

  • 請善用 程式碼與語法高亮標記 - iT邦幫忙 的 Markdown
    不然, 至少, 編輯區工具列, 有個 新增程式碼 (Ctrl-Alt-C) 能用。
    editor-toolbar
    ( 程式碼區塊 亦可用以存放各種文字資料, 以方便他人閱覽。 )

  • iThelp-Markdown 的語法高亮之自動識別時常錯判, 建議用下面方式 (bat) 指定語言:

```bat
echo hello, world
```

如開頭所說,我是語法新手,因為有需求使用,所以才爬文,並非直接用CHATGPT貼來問,所以內容很亂。
但也感謝你的回覆,還是得多學一點batch來解決問題的處理。

re.Zero iT邦研究生 5 級 ‧ 2023-05-18 20:38:26 檢舉

@ MIS小菜雞 :
因為看到腳本有設定變數值, 後面卻不使用變數值而使用字串, 感到很神奇, 謝謝解惑~ 祝學習順利~

我要發表回答

立即登入回答