pretty code

顯示具有 Batch 標籤的文章。 顯示所有文章
顯示具有 Batch 標籤的文章。 顯示所有文章

2021年7月16日 星期五

膠水語言

印象中 Perl 是最早有膠水之稱的程式語言,意思是它很容易與其他程式語言結合。但我覺得任何一種 script 語言其實都可以當作膠水語言。

最近為了結合我自己的 Node.js 程式與别人寫好的 Python 程式,我選擇以 Windows Batch 來當中介,由於我需要將 Python 程式中得到的字串傳遞出來,原本考慮使用 os.putenv or os.environ 這兩種方式來傳遞環境變數,但在我的 Windows Batch 中卻無法接到此變數,本來在不同 script 中傳遞變數便有些東西須考量,不論是 Windows Batch 或是 Linux bash script 皆是如此。最終我決定使用檔案來傳遞就好,反正只要使用下面這招,就可以重導向去環境變數。

os.system("echo {0} > name.txt".format(outname))

SET /p BOOK=<name.txt

下面就是我的最終結果,終於有了好用的工具可以嘿嘿了XD


2021/08/03 更新

晚上打完下班卡後,馬上快速的替 CSS filter 加上去除 font 指定字型的功能,經實測還可以,希望可以一勞永逸的解決 Kindle 指定中文字型的問題。

2021年6月9日 星期三

Replace string in Windows batch

剛剛想要將我的測試程式一條龍自動化,故我需要一個方法把 Windows batch 裡面的某個路徑動態改變成我要的路徑,就只差這一步以後我新增 API 都可以很方便的測試了!

Google 了一下,原來也算是很簡單的一件事,連回公司電腦測試也都沒有問題,看來我這個專案以後開發會更輕鬆了。

set mystring=abc def
set newstring=%mystring:abc=def%
echo %newstring%

執行結果:
def def

2020年4月23日 星期四

使用 Windows Batch File 調整網路介面設定

之前寫了一個 Batch File 可以選擇要使用那個網路介面工作,因為 D 槽被自己的白爛程式砍掉後,暫時只能手動處理。

最近又需要頻繁切換有線網路及無線網路好登入 Linux 主機,為了增加工作效率,憑著記憶再把原本的 Batch File 重現,一天累積下來大概可以節省 1 分鐘又 40 秒吧,我果然是個節省的人XD

至少爽度無限呀!

另外,我習慣拉捷徑至桌面好方便操作,因為 Windows 10 某些指令需要管理員權限,只要在捷徑->進階內容,將以管理員身分執行選項勾選即可。

@echo off

echo 1. Use LAN network.
echo 2. Use WIFI network.
echo 3. Disable All interfaces.
echo.

set /p ID=Your choice :

IF "%ID%" == "1" (
    goto C1
)

IF "%ID%" == "2" (
    goto C2
)

IF "%ID%" == "3" (
    goto C3
)

goto END

:C1
netsh interface set interface name="乙太網路" admin=ENABLED
netsh interface set interface name="Wi-Fi" admin=DISABLED
goto END    
    
    
:C2
netsh interface set interface name="乙太網路" admin=DISABLED
netsh interface set interface name="Wi-Fi" admin=ENABLED
goto END

:C3
netsh interface set interface name="乙太網路" admin=DISABLED
netsh interface set interface name="Wi-Fi" admin=DISABLED
goto END

:END
pause

2019年3月19日 星期二

mongodump stderr message

最近在使用程式定時備份 MongoDB,發現在備份之後的 code 都無法執行。

查了一下才發現,mongodump 的 message 是往 stderr 丟,故程式不能以 stderr 是否有字串來判斷成功與否。

應該要對 stderr 再做一次過濾,如果有 "Failed" or "error ",理論上就是 dump 過程中有錯誤。

不過因為我不知道所有的錯誤訊息內容,以上方式只是針對 MongoDB service 沒有啟動的 case。

另外,為了自動排程執行,有些人可能是用 Windows batch 再包一層。

如果要在 batch 中將訊息直接導向到  log,正確做法應該如下。

run.bat > back.log 2>&1

">" 前面沒有寫就表示 default (STDOUT=1)。
"2>&1" 將 STDERR(2) 導向到 STDOUT(1)。

2017年12月11日 星期一

Windows 工作排程器 command-line

雖然我們可以用 GUI 界面去設定工作排程
但這樣的方式不太容易自動化

幸好,Windows  有一個指令 schtasks
我們可以利用它來自動化建立排程

Examples:
    SCHTASKS
    SCHTASKS /?
    SCHTASKS /Run /?
    SCHTASKS /End /?
    SCHTASKS /Create /?
    SCHTASKS /Delete /?
    SCHTASKS /Query  /?
    SCHTASKS /Change /?
    SCHTASKS /ShowSid /?


不過如果要執行的是批次檔,常會遇到工作路徑不對的問題
這時候我們有 2 種解決方式

1. 照 help 說明,傳參數進去,可惜我不管如何排列組合,總是不成功

    ==> 檔案路徑中的空白可使用兩組引號,一組
        用於 CMD.EXE,另一組用於 SchTasks.exe。用於 CMD 的外部引號
        必須是雙引號; 內部引號則可以是單引號或
        逸出雙引號:
        SCHTASKS /Create
           /tr "'c:\program files\internet explorer\iexplorer.exe'
           \"c:\log data\today.xml\"" ...


2. 利用內建變數,切換磁碟機與資料夾路徑

@echo off

%~d0
cd %~dp0


搞定收工,方法 1 有空再來看怎麼回事?

2014年7月16日 星期三

cmd 指定路徑

cmd /K "cd /d D:\PathName"

只要在批次檔用此語法
便可以開啟一個指定路徑的 DOS 視窗
在 XP 應該蠻有用的

如果是 Win7 以上
只要在資料夾按下 Shift + 滑鼠右鍵
便可以開啟該路徑的 DOS 視窗