Exploring and Thinking

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

踢掉遠端主機上桌面連線帳號的簡易批次檔

這個算是一個很冷門的使用需求,主要是用來一鍵踢掉某台主機的全部遠端連線使用者。

將程式碼存成.bat,再執行這個檔案。輸入目標ip即可:

程式碼重點說明:

  1. if 是判斷是否有輸入值,沒有就直接中斷批次檔。
  2. net use 是先製造遠端權限,待清除完之後自動結束。
  3. for /l 裡的 in (0, 1, 10) 代表從0開始累加1,直到10為止。
  4. tsdiscon 是結束遠端桌面連線指令。

@echo.
@echo off
set /p ip="Please input Server IP: "
if "%ip%" NEQ "" GOTO :kickRD
GOTO :end
:kickRD
net use \\%ip% /user:帳號 "密碼"
for /l %%x in (0, 1, 10) do (
tsdiscon %%x /SERVER:%ip%
net use \\%ip% /delete 
)
:end
Share:

Linux備份檔案至Nas

這個範例是將Linux系統內的檔案,備份至Nas系統。

採取的方式是每天固定時間抓取Linux檔案,使用copy方式至Nas。

bash檔特殊的地方,主要是第五行和第六行,分別取得當天的日期和星期,格式單純數字化(大Y指四位數年份)。

因Linux每天將產生的檔案,分別放在0~6的資料夾內,代表星期日~星期六。因此我做一個迴圈判斷式,若今天是星期一,bkDateW=1,則會抓取資料夾"1"內的檔案。

抓到資料後,將檔案複製到Nas,檔名前面加日期"$bkDate"。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
 
bkDate=$(date --d="today" +%Y%m%d) # Get the date of today, format: 20120316
bkDateW=$(date --d="today" +%w) # Get the date of week, format: 5
 
# Copy and rename files to Nas.
case $bkDateW in
 
        "0")
        cp file/0/testFile bkEMtemp/"$bkDate"_testFile
        ;;
 
        "1")
        cp file/1/testFile bkEMtemp/"$bkDate"_testFile
        ;;
 
        "2")
        cp file/2/testFile bkEMtemp/"$bkDate"_testFile
        ;;
 
        "3")
        cp file/3/testFile bkEMtemp/"$bkDate"_testFile
        ;;
 
        "4")
        cp file/4/testFile bkEMtemp/"$bkDate"_testFile
        ;;
 
        "5")
        cp file/5/testFile bkEMtemp/"$bkDate"_testFile
        ;;
 
        "6")
        cp file/6/testFile bkEMtemp/"$bkDate"_testFile
        ;;
esac

接著我用root去vi rc.local(一般位在/etc/rc.local, 找不到可使用 find / -name rc.local 指令尋找),mount 資料夾 bkEMtemp。在此之前需先建一個資料夾,如本例的bkEMtemp,再chmod 777 (設定權限)。

這樣每次重開機進來時,系統就會將nas資料夾mount進來。

1
mount -t cifs //nas的ip/資料夾 /home/帳號/bkEMtemp -o user=account,pass=password

最後在原本的帳號,輸入「crontab -e」,將排程放進去,此例是每天下午四點半執行bkEM.sh。

bkEM.sh也需設定權限,chmod 755才行喔!
1
30 16 * * * /home/帳號/bkEM.sh

Share:

自動備份Log的Batch小程式

這兩天有備份Log的需求,想要讓電腦自動排程備份資料,不用定期整理、備份這些Log。需求很簡單,使用Dos的Batch檔指令即可完成。

在日期方面有點難度,我想要的是上個月資料而非今天,所以參考如何在 Batch 檔取得系統的日期、時間欄位 (第三版)文章來取得資料。
取得上個月資料的寫法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
REM 取得今天的年、月、日 (自動補零)
SET TodayYear=%date:~0,4%
SET TodayMonthP0=%date:~5,2%
SET TodayDayP0=%date:~8,2%

REM 取得今天的年、月、日 (純數字)  
REM 2010/08/03 更新:以下是為了修正 Batch 遇到 08, 09 會視為八進位的問題  
IF %TodayMonthP0:~0,1% == 0 (  
    SET /A TodayMonth=%TodayMonthP0:~1,1%+0  
) ELSE (  
    SET /A TodayMonth=TodayMonthP0+0  
)  
  
IF %TodayMonthP0:~0,1% == 0 (  
    SET /A TodayDay=%TodayDayP0:~1,1%+0  
) ELSE (  
    SET /A TodayDay=TodayDayP0+0  
)  
  
echo 日期 %TodayYear%/%TodayMonth%/%TodayDay%  
echo 日期 %TodayYear%/%TodayMonthP0%/%TodayDayP0%  

REM 取得上個月的年、月  
SET /A LastMonthYear=%TodayYear%+0  
SET /A LastMonthMonth=%TodayMonth%-1  
SET /A LastMonthMonthP0=%LastMonthMonth%  
REM 修正年份與月份的數值  
IF %LastMonthMonth% EQU 0 (SET /A LastMonthYear=%thisYear%-1)  
IF %LastMonthMonth% EQU 0 (SET LastMonthMonth=12)  
IF %LastMonthMonth% LSS 10 (SET LastMonthMonthP0=0%LastMonthMonth%)  
  
echo 日期 %LastMonthYear%/%LastMonthMonth%  
echo 日期 %LastMonthYear%/%LastMonthMonthP0%  

接著將上個月的檔案撈出來壓縮,WinRAR可以抓到檔案的修改日期,若檔名無法判斷日期出來,則需附上-ta參數,01代表該月1號。其他參數表示:a (新增壓縮檔)、-r (含子目錄)、-m5 (最大壓縮比)。

以此例來說,因檔名有日期,所以後方搭配日期和星號即可,我兩種方法都寫出來。

第二、三步則是將檔案複製過去,再刪除原本產生的rar檔案。

1
2
3
4
5
"C:\Program Files\WinRAR\WinRAR.exe" a -r -ep -m5 -ta%LastMonthYear%%LastMonthMonthP0%01 "D:\log\%LastMonthYear%%LastMonthMonthP0%.rar" "D:\source\%LastMonthYear%%LastMonthMonthP0%*_XML.LOG"

xcopy "D:\log\%LastMonthYear%%LastMonthMonthP0%.rar" \\10.0.1.1\log

del /s/q D:\log\%LastMonthYear%%LastMonthMonthP0%.rar

我在另一個環境使用相同的方法時,遇到WinRAR壓縮時卡住不動,研判可能目錄的檔案太多,使用7z則不會有這個問題。複製檔案也無法傳送,或許檔案太大,因此用另一種方式處理。

程式1、4行單純寫入執行的過程是否成功。第2行使用7z壓縮欲備份的檔案、第3行使用ftp上傳壓縮檔。

1
2
3
4
5
echo ----- %date% %time% ----- >> d:\ian\log.txt
"C:\Program Files\7-zip\7zG.exe" a -r -mx9 "d:\Ian\%LastMonthYear%%LastMonthMonthP0%.7z" "d:\backup\%LastMonthYear%%LastMonthMonthP0%*"
ftp -s:d:\Ian\nas.txt
echo ----- %LastMonthYear%%LastMonthMonthP0%.7z 備份成功 ----- >> d:\ian\log.txt
del /s/q d:\Ian\8561_%LastMonthYear%%LastMonthMonthP0%.7z

ftp上傳需好幾個步驟,所以我另外建一個nas.txt檔讓ftp讀。程序如下:

第1行指定要連結的電腦IP(該電腦需開啟FTP服務),第2、3行輸入帳號、密碼,第4行指定binary傳輸,第5行設定不詢問問題(例如問我是否真的要上傳檔案),第6行切換ftp主機內的目錄,第7行將檔案上傳,第8行結束。

1
2
3
4
5
6
7
8
open hostIP
account
password
binary
prompt off
cd 子目錄
mput d:\Ian\*.7z
bye

實際應用大致上是這種作法,提供大家參考,若有更好的方式歡迎交流囉!
Share:

熱門文章