經常使用cmd代碼片斷及.net core打包腳本分享

bat基礎命令

  • 註釋:rem 註釋~~
  • 輸出:echo hello world
  • 接收用戶輸入:%1 %2,第n個變量就用%n表示
  • 當前腳本路徑:%~dp0
  • 當前目錄路徑:%cd%
  • 設置變量:set currentPath=%cd%
  • 關閉回顯:@echo off //隱藏執行路徑,@表示包含echo off這條命令也不現實路徑
  • 請按任意鍵繼續:pause
  • 調用外部程序:start xxx.exe
  • 等待子程序執行完畢:call start xxx.exe
  • 切換當前目錄:cd /d 路徑
  • 顯示下級子目錄名稱:dir /b /a:d
  • 顯示下級子文件名稱:dir /b /a:-d
  • 命令鏈接符:cmd1&cmd2,在cmd1執行成功後執行cmd2

1. 保存當前目錄到局部變量並輸出

保存:set currentPath=%cd%
輸出:echo %currentPathapp

2. 判斷第一個腳本參數是否爲ab(/i 忽略大小寫),如果則輸出success,不然輸出參數

if /i %1 == ab (echo success) else (echo %1)asp.net

3. 判斷當前執行目錄(驅動器、文件或文件夾)是否存在是否存在logs文件夾,若不存在則建立

if not exist %cd%\logs md %cd%\logs網站

4. 一個簡單的for循環打印當前目錄文件及文件夾(bat腳本中須要%%,直接執行只須要一個%便可)

for /f "delims=" %%i in ('dir /b .\') do echo %%i.net

5. for循環裏面對變量的賦值

這個默認若是對變量進行賦值打印( echo %變量%)出來的結果始終是第一次的賦值結果,
若要對局部變量賦值則須要啓用延遲環境變量擴展( setlocal enabledelayedexpansion)
將其添加到頭部後,對變量賦值,而後輸出: echo !變量名!。符號由%變動爲!
rem 輸出當前目錄下的文件文件夾
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /b  .\') do (
    set temp=%%i
    echo !temp!
)

6. 使用for goto 將字符串(a+b+c-d)以+或者-分割並輸出(作點事)

@echo off
setlocal enabledelayedexpansion
set str="a+b+c-d"
:Step1
for /f "delims=-+, tokens=1,*" %%a in (%str%) do (
REM todo case a b c d...
    echo %%a
REM 從新賦值並跳轉到GOON
    set str="%%b"
    goto Step1
)

7. 重啓IIS站點

中止:C:\Windows\System32\inetsrv\appcmd.exe stop site 網站名稱
啓動:C:\Windows\System32\inetsrv\appcmd.exe start site 網站名稱
或者經過寫入/刪除app_offline.htmcode

8. asp.net core(2.0) 項目發佈到iis腳本

經過寫入app_offline.htm文件,請求重定向到此文件解決進程佔用問題,發佈完成後刪除文件請求進入core網站。htm

將腳本放到core項目的文件夾,路徑自行修改,默認輸出項目在src/UI文件夾中。打包文件在當前目錄的release文件夾下token

@echo off
:: 變量賦值,使用!name!

setlocal enabledelayedexpansion

set currentPath=%~dp0
set tempModulesPath=%currentPath%\temp
set modulesPath=%currentPath%\src\UI\

set str="項目名稱1+項目名稱2"

:GOON
for /f "delims=,+, tokens=1,*" %%i in (%str%) do (
    echo --------------------------------------------------------
    echo 【%%i】發佈開始
    set path1=%modulesPath%%%i
    set path2=%currentPath%\release\%%i\
    set filnePath=!path2!app_offline.htm
    echo !path1!
    echo 中止【%%i】站點
    if not exist !path2! md !path2!

    cd /d !path1!
    echo 執行發佈【!path2!】
    echo 網站維護中>!filnePath!
    call dotnet publish -o !path2!
    call xcopy %tempModulesPath% !path2! /s /e /Q /Y /I
    del !filnePath!
    echo 開啓【%%i】站點
    
    echo 【%%i】發佈完成
    set str="%%j"
    goto GOON
)

pause
相關文章
相關標籤/搜索