顯示具有 DOS指令 標籤的文章。 顯示所有文章
顯示具有 DOS指令 標籤的文章。 顯示所有文章

2015年11月21日 星期六

AD 網域 GPO 自動關機

轉自 http://wenku.baidu.com/view/67e9a1e4240c844769eaeec1.html?re=view

ADGPO下发自动关机用户计算机配置文档
一、自动关机脚本编写
打开记事本写内容如下:
@echo off
ver|find "5.0" >nul && if not errorlevel 1 goto 2k
ver|find "5.1" >nul && if not errorlevel 1 goto xp
ver|find "5.2" >nul && if not errorlevel 1 goto win2k3
ver|find "6.0" >nul && if not errorlevel 1 goto vista
ver|find "6.1" >nul && if not errorlevel 1 goto win7
goto win7
:2k
at /delete /yes
AT 18:00 /interactive /every:M,T,W,Th,F,S,Su \\AD......\scripts\自动关机.exe
exit
:xp
at /delete /yes
AT 18:00 /interactive /every:M,T,W,Th,F,S,Su \\ AD......\scripts\自动关机.exe
exit
:win2k3
exit
:vista
SCHTASKS /Delete /tn "*" /f
schtasks /create /tn 自动关机 /tr "\\ AD......\scripts\自动关机.exe" /sc daily /st 18:00:00 /it /f
exit
:win7
SCHTASKS /Delete /tn "*" /f
schtasks /create /tn 自动关机 /tr "\\ AD......\scripts\自动关机.exe" /sc daily /st 18:00:00 /it /f
exit
另存为*.BAT文件。  
# 以上脚本是修改后的,原来的脚本只是用AT命令创建任务,通过反馈信息发现公司可能部分用户使用的是非XP系统,因此重新编制脚本进行终端用户系统判别,判断系统后由不同的命令创建任务,这样保证XP以上版本系统在运行任务时都以交互式运行。

说明
1、脚本首先判断终端用户操作系统版本,2KXPVISTAWIN7建立计划任务应该使用不同的命令,否则任务无法和用户交互。
2、判断终端系统是2KXP执行下面命令
AT /delete /yes
通过AT命令删除全部计划任务,这样是为了保证任务ID相同不重复任务
AT 18:00 /interactive /every:M,T,W,Th,F,S,Su \\ AD......\scripts\自动关机.exe
通过AT命令新建任务ID=1,参数/interactive实现交互界面,否则关机窗口不弹出,时间为1800,周一至周日都运行,执行程序路径设置为AD域服务器共享路径。
/ interactive参数就是设置XP系统有用户交互,由于schtasks命令在XP系统版本中没有/it参数,所以使用AT命令的这个参数。
3、判断终端系统是2K3不操作EXIT直接退出。
4、判断终端系统是VISTAWIN7执行命令(goto win7其他的未知操作系统也按这条命令执行,域用户终端最低版本一般应该是XP
SCHTASKS /Delete /tn "*" /f
   删除原来所有的计划任务
schtasks /create /tn 自动关机 /tr "\\ AD......\scripts\自动关机.exe" /sc daily /st 18:00:00 /it /f
/create参数是新建任务,/tn后面是任务名称,/tr是指定要执行命令的路径,/sc设为每天,/st设置触发时间为18:00:00 /it 设置当用户登录时,这个就是设置WIN7VISTA      系统运行任务时和用户交互,/f参数是当创建任务时任务名已经存在强制覆盖。

二、编写自动关机程序
打开VB编程软件
1窗体Form,插入控件commandTimerLabelImage
写如下代码:

Private Declare Function SetWindowPos Lib "user32" (ByVal HWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Dim m, m1, s, s1 As Integer
Private Sub command1_click()
End
End Sub
Private Sub Form_Load()
SetWindowPos Me.HWnd, -1, 0, 0, 0, 0, 2 Or 1          #这句是为了让窗体显示在最上层,上面有函数声明。
Timer1.Interval = 1000
Label1.Caption = ""
m = 0: m1 = 3: s = 0: s1 = 0
End Sub
Private Sub Timer1_Timer()
s1 = s1 - 1
If s1 < 0 Then
 s = s - 1
 s1 = 9
 If s < 0 Then
 m1 = m1 - 1
 s = 5
 If m1 < 0 Then
 m = m - 1
 m1 = 9
 End If
 End If
End If
If m = 0 And m1 = 0 And s = 0 And s1 = 0 Then
Timer1.Enabled = False
Shell "cmd.exe /c shutdown -s -t 0"
End If
Label1.Caption = m & m1 & ":" & s & s1
End Sub
2、调整各控件位置,美化界面。
3、生成工程程序(自动关机.exe)。

三、GPO策略
1、新建GPO(定时关闭公司计算机)——计算机配置——Windows设置——脚本——启动脚本,浏览选择上面保存的BAT文件路径,选定文件点击确定。    也可以下发用户启动脚本
2、选定需要下发OU ,链接现有GPO策略,选择刚建立的“定时关闭公司计算机”,点确定。
至此计算机策略GPO下发,实现具有终端交互式的定时关机完成。



注意事项:GPO下发需要注意脚本及程序文件路径,文件路径尽量是域控共享路径下,必须终端用户权限访问正常。

轉自  https://social.technet.microsoft.com/forums/zh-TW/d5281e5b-2dbc-4cea-8005-f22acd9818ba/2008-r2-schedule-tasks-gpo-to-shutdown-client-computers


建立[群組原則] 物件,若要變更電源配置設定

轉自 https://support.microsoft.com/zh-tw/kb/915160
若要建立群組原則] 物件,若要變更的電源配置設定,請依照下列步驟執行:
  1. 在網域控制站中,將 Powercfg.exe 檔案複製到 NETLOGON 共用。
    • 根據預設,Powercfg.exe 檔案位於 Windows 2003 的電腦上的 [ %systemroot%\System32] 資料夾中。
    • 根據預設,NETLOGON 共用的資料夾位於的 Windows Server 2003 電腦上的%systemroot%\Sysvol\Sysvol\Domain_DNS_name\Scripts。
  2. 按一下 [開始],按一下 [執行]、 輸入dsa.msc,然後按一下[確定]這會啟動 「 Active Directory 使用者及電腦嵌入式管理單元。
  3. 在 [ Active Directory 使用者和電腦] 對話方塊中,網域控制站,以滑鼠右鍵按一下,然後按一下內容
  4. 在 [群組原則] 索引標籤上按一下 [新增]。
  5. 鍵入電源設定原則,,然後按 ENTER 鍵。
  6. 按一下 [編輯]。
  7. 在 [使用者設定中,展開 [ Windows 設定],然後按一下指令碼
  8. 在右窗格中,請連按兩下 [登入,,,然後按一下 [顯示檔案使用者的\Scripts\Logon資料夾會出現。
  9. 在使用者的 [ Scripts\Logon ] 資料夾中建立新的批次檔,使用者的電腦上設定的電源配置設定。若要執行這項操作,請依照下列步驟執行:
    1. 按一下檔案,按一下 [新增],然後按一下 [文字文件
    2. 輸入PowerConfig.bat,然後再按 ENTER 鍵。
    3. 在 [重新命名] 對話方塊中,按一下 []。
    4. PowerConfig.bat,以滑鼠右鍵按一下,然後按一下 [編輯
    5. 如果開啟檔案-安全性警告] 對話方塊隨即出現,請按一下 [執行]。
    6. 在批次檔中,輸入下列命令:
      @echo off
      net use x: \\domain_DNS_name\netlogon
      x:
      powercfg.exe /change "always on" /monitor-timeout-ac 20
      powercfg.exe /SETACTIVE "always on"
      c:
      net use x: /delete
      
      注意Domain_DNS_name這個詞彙用在批次檔中為網域控制站的 DNS 名稱的預留位置。
    7. 按一下 [檔案],按一下 [結束],然後按一下[是]
  10. 關閉 [ Scripts\Logon ] 資料夾。
  11. 登入內容] 對話方塊中,按一下 [新增]、 按一下 [瀏覽],連按兩下 [PowerConfig.bat,,然後按兩次[確定] 。
  12. 電腦設定] 底下展開 [ Windows 設定、 展開 [安全性設定],然後展開 [本機原則
  13. 按一下 [使用者權限指派],然後按兩下 [系統關機
  14. 關閉 [系統內容] 對話方塊中,按一下 [新增使用者或群組,在 [使用者和群組名稱] 方塊中,鍵入使用者的網域名稱和帳戶名稱,然後按兩次[確定] 。
  15. 電腦設定],再展開 [ Windows 設定,展開 [安全性設定],然後按一下登錄
  16. 在 [群組原則物件編輯器] 對話方塊中,按一下 [動作],然後按一下新增機碼
  17. 選取索引鍵] 方塊中,輸入下列的項目,,然後按一下[確定]:
    MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg
  18. 按一下 [新增],在 [輸入物件名稱來選取] 方塊中,鍵入使用者的帳戶名稱,然後按兩次[確定] 。
  19. 新增物件] 對話方塊中,按一下 [設定此機碼,然後,按一下繼承的使用權限傳播到所有子機碼,,然後按一下[確定]
  20. 群組原則物件編輯器] 中,按一下 [動作],然後按一下新增機碼
  21. 選取索引鍵] 方塊中,輸入下列的項目,,然後按一下[確定]:
    USERS\。DEFAULT\Control Panel\PowerCfg
  22. 按一下 [新增],在 [輸入物件名稱來選取] 方塊中,輸入使用者的帳戶名稱,然後按兩次[確定] 。
  23. 新增物件] 對話方塊中,按一下 [設定此機碼,然後,按一下繼承的使用權限傳播到所有子機碼,,然後按一下[確定]
  24. 在 [群組原則物件編輯器] 對話方塊中,按一下 [檔案],然後按一下結束
  25. 在網域容器的內容對話方塊中,按一下[確定]
  26. 在 [ Active Directory 使用者和電腦] 對話方塊中,按一下 [檔案],然後按一下結束
注意使用者必須具有下列登錄子機碼的寫入權限:
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg
  • HKEY_ USERS\。DEFAULT\Control Panel\PowerCfg

注意第一次使用者登入使用者的電腦原則會失敗,因為其他權利與權限已不生效。第二次使用者登入電腦,已套用原則,而且使用者變更的電源配置設定的權限。

設定電源設定的使用者存取

若要拒絕權限變更修改登入的批次檔的設定,設定 PowerCfg.cpl 檔案的使用者存取。
  1. 按一下 [開始]、 按一下 [執行]、 輸入 dsa.msc,然後按一下 [確定]]。這會啟動 Active Directory 使用者及電腦 嵌入式管理單元。
  2. 在 [ Active Directory 使用者和電腦] 對話方塊中,網域控制站,以滑鼠右鍵按一下,然後按一下內容
  3. 在 [電腦設定中,展開 [ Windows 設定],然後按一下檔案系統
  4. 在 [群組原則物件編輯器] 對話方塊中,按一下 [動作],然後按一下新增的檔案
  5. 在 [新增檔案或資料夾] 對話方塊中,在 [資料夾] 方塊中,輸入%SystemRoot%\system32\powercfg.cpl ,然後按一下[確定]
  6. 按一下 [新增],在 [輸入物件名稱來選取] 方塊中,鍵入使用者的帳戶名稱,然後按一下[確定]
  7. 在 [使用者名稱的權限的存取權限] 群組中,按一下以選取 [完全控制] 權限,[拒絕] 核取方塊,然後按一下[確定]
  8. 在 [安全性] 對話方塊中,按一下 []。
  9. 新增物件] 對話方塊中,按一下 [設定此機碼,然後再按一下繼承的使用權限傳播到所有子機碼,,然後按一下[確定]
參考

使用GPO規則幫使用者自動安裝印表機


轉自  http://lms.twivs.tnc.edu.tw/t2710/doc/496
大概的指令:
  • 新增網路印表機:
    rundll32 printui.dll,PrintUIEntry /in /q /n \\(伺服器名稱)\(印表機分享名稱)
  • 將網路印表機設定為「預設印表機」:
    rundll32 printui.dll,PrintUIEntry /y /q /n \\(伺服器名稱)\(印表機分享名稱)
  • 刪除網路印表機:
    rundll32 printui.dll,PrintUIEntry /dn /n \\(伺服器名稱)\(印表機分享名稱)

開啟群組原則管理MMC,啥?!還沒安裝這個好用的工具?!  請到這邊下載安裝 http://www.microsoft.com/downloads/details.aspx?FamilyID=0a6d4c24-8cbd-4b35-9272-dd3cbfc81887&displaylang=zh-tw ,直接安裝在XP下即可管理DC的GPO,安裝完後在程式集 => 系統管理工具 底下就會出現 群組原則管理
1.建立新的GPO規則 自動新增印表機
1 
2
2.對該GPO關閉電腦組態
3
3.開始設定 自動新增印表機 GPO
4

4.使用者 => 指令碼 => 登入 => 滑鼠右鍵選內容
5
5.選 顯示檔案
6
6.建立  ModifyPrinter.bat 批次檔,並編輯輸入新增印表機的指令後存檔
8
7
7.新增剛剛建立好的 批次檔 ,這樣使用者就可以在登入網域時,背景自動安裝對應印表機。
9
10

若不想每次使用者都重覆新增印表機的動作,可在ModifyPrinter.bat 內做判斷:
請先在24h開機的機器上建立分享資料夾,權限要設定好讓使用者能寫入(通常開authenticated users權限即可),在此目錄下建立個空白 *.txt 檔案記錄使用者或電腦明稱。
===============================================================
@echo off
if not exist \\filesrv-vm\gpowork\InstallPrinter-test.txt goto End  <==判斷目錄與檔案是否存在,若不存在就跳離批次檔
@type \\filesrv-vm\gpowork\InstallPrinter-test.txt |find/I "[%COMPUTERNAME%][%USERNAME%]" > nul 2>&1  <==查詢 txt 檔內容是否有對應的電腦名稱與使用者名稱,若有則不再執行新增印表機動作,若沒有則開始新增印表機的動作  if %errorlevel% == 0 goto End
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\HP2015
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\HP2015PS
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\RICOH1045
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\RICOH1045紙夾四
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\支票
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\派車單
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\帳冊
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\報單倉單2
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\報單倉單3
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\發票
rundll32 printui.dll,PrintUIEntry /in /q /n \\prtsrv-vm\傳票
echo [%COMPUTERNAME%][%USERNAME%] >> \\filesrv-vm\gpowork\InstallPrinter-test.txt  <==新增完印表機則將電腦名稱與使用者名稱寫入txt檔案內
exit
:End
==================================================================
txt檔案成功寫入後大概會是長這樣:
========================================
[ROGER-AMD][roger] 
[ROGER-DELPHI-VM][roger] 
[FILESRV-VM][administrator] 
[PC005][gina] 
[PC013][kevin] 
[PC008][kevin] 
[PC009][kate] 
[PC010][rich] 
[PC016][op] 
[PC007][david] 
[PC004][eric] 
=======================================
這樣不同的使用者在相同的電腦上也可以確認使用者能夠新增到印表機。

2015年11月18日 星期三

批次 備份Oracle

@ECHO OFF

for /F "tokens=1-4 delims=/ " %%i in ('date /t') do (
set DayOfWeek=%%l
set Month=%%j
set Day=%%k
set Year=%%i

set Date=%%i %%j/%%k/%%l
)

for /F "tokens=1-2 delims=: " %%m in ('time /t') do (
set Hour=%%m%%n
set Minute=%%o

)

ECHO Date is %Date%
ECHO Day of the week is "%DayOfWeek%", Month is "%Month%"
ECHO Day is "%Day%", Year is "%Year%"
ECHO Hour is "%Hour%", Minute is "%Minutes%"

REM ========= export test database =========================================================

exp MF2000/MF2000 file=Y:\DB_Data\%Year%%Month%%Day%_mf2000.dmp  log=Y:\DB_Data\%Year%%Month%%Day%_mf2000.log
exp MF2000/MF2000 file=Y:\DB_Data\%Year%%Month%%Day%_mf2005.dmp  log=Y:\DB_Data\%Year%%Month%%Day%_mf2005.log
exp MF2000/MF2000 file=Y:\DB_Data\%Year%%Month%%Day%_mf20051.dmp  log=Y:\DB_Data\%Year%%Month%%Day%_mf20051.log
exp MF2000/MF2000 file=Y:\DB_Data\%Year%%Month%%Day%_mf20061.dmp  log=Y:\DB_Data\%Year%%Month%%Day%_mf20061.log
exp MF2000/MF2000 file=Y:\DB_Data\%Year%%Month%%Day%_mf20062.dmp  log=Y:\DB_Data\%Year%%Month%%Day%_mf20062.log
exp MFTEST/MF2000 file=Y:\DB_Data\%Year%%Month%%Day%_mftest.dmp  log=Y:\DB_Data\%Year%%Month%%Day%_mftest.log
exp MFTEST/MF2000 file=Y:\DB_Data\%Year%%Month%%Day%_mftest2.dmp  log=Y:\DB_Data\%Year%%Month%%Day%_mftest2.log

2015年11月10日 星期二

批次檔指令 IF GOTO FOR CALL

轉自  http://ca95.pixnet.net/blog/post/3922827-bat-批次檔指令


這些是在bat批次檔裡面常會看見的,
其他還有像是shift、for、...


echo ...  (顯示...,配合@echo off,給別人的注解)
命令>nul  (放於命令列最後,不顯示執行結果)
rem  ...  (取消...命令,給自己的注解,隱藏的)
pause ...  (暫停,...可當注解)
call other.bat  (呼叫其他批次檔插入執行)
set dircmd=/l/a/o/p  (設定環境變數,如dir cmd 預設參數)
if "%config%"=="mini" goto mini  (判斷指令 "變數"=="字串" 到mini項) (=goto %config%)
:mini


另外2篇在我blog裡DOS相關祕技是在這:
祕技真傳:DOS 指令 http://blog.pixnet.net/ca95/post/2788500

介紹Config.sys文件(與Autoexec.bat) http://blog.pixnet.net/ca95/post/3208514


當然bat 批次檔指令較詳盡的說明:
參考:MS-DOS的批次檔 (含圖結果)
http://enews.tpc.edu.tw/document/technology/2001/%E6%95%99%E7%B6%B2%E4%B8%AD%E5%BF%83%E5%8A%89%E4%BB%81%E5%AE%87%E3%80%8CMS-DOS%E6%89%B9%E6%AC%A1%E6%AA%94%E3%80%8D.htm
==========
早期在DOS系統工作下,都可能需要使用批次檔來執行電腦工作,當文字介面的系統逐漸被Windows、Unix系統(圖形介面)所取代時,現今一般使用電腦的人,可能也不是很清楚什麼是批次檔,我們今天就來介紹何謂批次檔。
批次檔是一種文字檔案(ASCII檔案),由一連串的MS-DOS命令所組成的。批次檔的命名規則與一般檔案相同,但其副檔名固定為".BAT",即"將一連串的命令"儲存在檔案中,該批次檔的指令可無限制的重覆使用,永遠得到相同的執行結果。究竟批次檔又該如何使用呢?以下介紹批次檔的常用指令。
批次檔的常用指令如下:
一、 ECHO
在正常的情況下,批次檔中的每道命令執行前都會先出現螢幕上。有了ECHO命令,就可以任意控制是否列印出命令列。
用法:在批次檔中鍵入echo on/off ,on:表示要印出命令列,off:則不印出命令列,若要禁止批次檔的命令顯示在螢幕上,則使用隱藏echo off(@ECHO OFF),用法在命令列的開頭上加上@符號
Ex:
@echo off 表示資料隱藏
echo .... 測試ECHO指令
echo .... 請稍後
echo .... 完成....
二、 代換參數
代換參數的標記是一個百分號(%)再跟著一個阿拉伯數字,最多可使用10個代換參數,這些變數的值,則由呼叫批次檔的命令所指定。
Ex:
@echo off
echo .... 測試代換參數指令
echo .... 請稍後
echo .... 完成.....
echo %1 %2 %3 %4
三、 PAUSE:是暫停批次檔的執行。當MS-DOS執行到PAUSE時就暫時中止目前的工作,並印出下列訊息:
press any key to contunue …… 
Ex:
@echo off
echo .... 測試代換參數指令
echo .... 請稍後
echo .... 完成.....
echo %1 %2 %3 %4
pause
echo %5 %6
四、 REM(REMark)用來在批次檔執行中顯示某些訊息,用法是在批次檔中鍵入rem,後面跟著所要顯示的字串
Ex:
@echo off
echo .... 測試代換參數指令
echo .... 請稍後
echo .... 完成.....
rem 下面指令,開始做代換參數
echo %1 %2 %3 %4
pause
echo %5 %6
五、 IF
IF命令在批次檔中用來測試特定的條件,以決定是否執行某些命令。絛件的型態分為四種:
(1) IF EXIST
此條件是用來檢查某一檔案是否存在,若存在則條件成立,便執行指定的命令
Ex:
@echo off
if exist test1.bat type test1.bat
echo 執行程式結束
(2) IF String1 = = String2(= = 表相等性的比較)
Ex:
@echo off
echo .... 測試IF指令
echo %1
if %1 == a goto first
if %1 == b goto second
if %1 == c goto three
:first
echo 執行first (a)
goto finish
:second
echo 執行second (b)
goto finish
:three
echo 執行three (c)
goto finish
:finish
(3) IF ERRORLEVEL
ERRORLEVEL是由MS-DOS所管理的一個系統變數,目的是監視所有錯誤發生的情況。(類似ErrorMessage)
(4) IF NOT
IF NOT是當測試條件不成立時才執行後面命令
Ex:
@echo off
if not exist test1.bat type test1.bat
echo 執行程式結束
六、 GOTO
GOTO命令在批次檔中用來轉移控制權,可以指示批次檔跳至某一標記(line label)由一個冒號(:)跟著字元符號所組成的;label也可使用代換變數
Ex:
goto first 或 goto %1
七、 FOR
FOR命令允許批次檔中的其他命令,可以重覆地執行
for %%a IN (file1 file2 file3) DO del %%a
虛擬變數必須以兩個百分號(%%)起頭,in後面著參數列,do後面跟著要執行的命令
Ex:
@echo off
echo .... 測試FOR指令
echo .... 請稍後
echo .... 完成.....
echo ....
for %%a IN (test_a.bat test_b.bat test_c.bat) do copy %%a prn
八、 SHIFT
SHIFT命令允許在批次檔的起動命令中,使用超過10以上的實際參數
(%0~%9)
九、 CALL
模組化的程式設計,是將一個完整的程式分割成一個個獨立的模組(module),每個模組負責一項功能
Ex:
@echo off
echo .... 測試CALL指令
echo .... 請稍後
echo %1 %2
call test_b
echo %3 %4
echo 程式模組已執行完畢 (test_a.bat)
@echo off
echo 執行test_b程式
echo 即將執行test_c .....
call test_c
echo 執行test_b程式完畢~~~ (test_b.bat)
@echo off
echo 執行test_c程式
if exist test2.bat type test2.bat
echo 執行test_c程式完畢~~~ (test_b.bat)
執行 test_a

批次 用vbs發信很簡單

轉自  http://adalf0722.blogspot.tw/2008/12/vbs.html

用vbs發信很簡單

server上不需安裝smtp服務,但你必須有一發信帳戶就可以使用這個發信囉,發信時還可附加檔案或從文字檔讀取內容喔

1.首先將下列script存成mail.vbs
Option Explicit
'變數宣告
dim FSO,objfile
dim SMTPSVR,MailFrom,MailTo
dim User,Password,Subject
dim Content,Nikename
dim addFile
'取參數
SMTPSVR = Wscript.arguments.Item(0)
User = Wscript.arguments.Item(1)
Password = Wscript.arguments.Item(2)
MailFrom = Wscript.arguments.Item(3)
MailTo = Wscript.arguments.Item(4)
Subject = Wscript.arguments.Item(5)
Content = Wscript.arguments.Item(6)
Nikename = Wscript.arguments.Item(7)
addFile = Wscript.arguments.Item(8)

MailFrom = """" & Nikename & """" & MailFrom

Call sendMail(SMTPSVR,User,Password,MailFrom,MailTo,Subject,Content,addFile)

Sub sendMail(SMTPSVR,User,Password,MailFrom,MailTo,Subject,Body,addFile)
Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory.
Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network).
Const cdoAnonymous = 0 'Do not authenticate
Const cdoBasic = 1 'basic (clear-text) authentication
Const cdoNTLM = 2 'NTLM
dim objMessage
dim ReadAllTextFile
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = Subject
objMessage.From = MailFrom
objMessage.Sender = MailFrom
objMessage.To = MailTo

'讀取文字檔
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(Body) Then
Set objfile = FSO.OpenTextFile(Body,1)
ReadAllTextFile = objfile.ReadAll
objfile.close
else
ReadAllTextFile = "文字檔案不存在!"
end if

if addFile <> "" then
If FSO.FileExists(addfile) Then
objMessage.AddAttachment addfile
else
ReadAllTextFile = ReadAllTextFile & " 附加檔案不存在!"
end if

end if
objMessage.TextBody = ReadAllTextFile

'objMessage.AddAttachment strAddfile
'==This section provides the configuration information for the remote SMTP server.
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SMTPSVR
'Type of authentication, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
'Your UserID on the SMTP server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = User
'Your password on the SMTP server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = Password
'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
'Use SSL for the connection (False or True)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
objMessage.Configuration.Fields.Update
'==End remote SMTP server configuration section==
objMessage.Send
Set objMessage = Nothing
'wscript.echo "信件已寄出"
End Sub
2.再將下列命令存成content.bat ,內容視情況修改("::"後面接的是註解喔)
::vbs的位置
set mailApp=".\mail.vbs"
::smtp server
set SMTPSVR="xxx.xxx.xxx"
::username
set User="username"
::password
set Password="pw"
::寄件者(暱稱,email address)
set MailFrom="test@mail.com.xx"
::收件者
set MailTo="test@mail.com.xx"
::主旨
set Subject="主旨"
::內容檔案的位置
set Content="d:\cc.txt"
::
set Nickname="管理者"
::附加檔案的位置
set addFile="d:\cc.txt"
::執行指令
call %mailApp% %SMTPSVR% %User% %Password% %MailFrom% %MailTo% %Subject% %Content% %Nickname% %addFile%
::pause

3.mail.vbs 與content.bat請放在同一層,執行 content.bat就可以發信囉

2015年11月9日 星期一

批次 檔案刪除n天前的檔案

轉自 http://blog.xuite.net/jenlin.hsu/twblog/135136548-用批次檔案刪除n天前的檔案

Windows 2000/XP:
Windows 2000及XP並未內建Forfiles,可以直接下載for win2k/xp專用的檔案來使用,forfiles命令能夠查找滿足指定條件的檔案,命令用法如下:
forfiles -p”<路徑>” -d"<天數>" -c"<執行命令>"
範例: forfiles -p"d:\backup" -s -m"*.bak" -d"-5" -c"cmd /c del @FILE"
上述的範例為指定刪除backup目錄及子目錄含有.bak檔五天前的檔案
※注意:@FILE必需為大寫

Windows 7/2003/2008:
Windows 7及Windows server 2003/2008已內建forfiles程式,命令用法如下:
forfiles /p”<路徑>” /d"<天數>" /c"<執行命令>"
範例: forfiles /p d:\backup /s /m *.bak /d -5 /c ”cmd /c del @file"

※注意:參數必須為斜線( / ),與windows 2000/xp不同,@file無大小寫區分


=====================================================================
轉自 https://www.facebook.com/permalink.php?id=243233719043132&story_fbid=370701986296304

用批次檔案刪除n天前的檔案如何簡單達成??
Windows Server 2003,它有一個forfiles命令能夠查找滿足指定條件的檔,下面是這個命令的用法。
forfiles /p <目標目錄名> /d <天數> /c <執行的命令>
看看列出的三個參數都有什麼用處:
/p 指定了要在哪個目錄裏查找檔,默認是當前工作目錄,注意不能在目錄名後面加斜杠。
/d 指定一個日期或天數,用於比較檔的最後修改日期是否符合條件。
/c 對每個找到的檔執行的命令。
例1.要把在E槽根目錄下最後修改日期大於或等於2009年7月1日的檔複製到F盤根目錄下:
forfiles /p "e:" /d "2009-7-1" /c "cmd /c copy @path f:\"
例2.刪除在E槽backup目錄下最後修改日期在10天前的檔:
forfiles /p "e:\backup" /d -10 /c "cmd /c echo deleting @file ... && del /f @path"
看了上面的例子,覺得在 Windows Server 2003 下面要刪除老檔很簡單吧。
但如果作業系統是 Windows 2000/XP 就比較麻煩,因為它們沒有forfiles命令,只能靠自己寫批次處理來實現了。
關於forfiles和for的詳細資訊,可以在Windows的幫助與支持中找到!!
=======================================
一般最常用的是刪除 log 檔案, 指定目錄, 並指令時間 (例如保留一週, 一週前的刪除), 就可以利用這個指令進行刪除:
forfiles /p c:\temp /s /m *.log /d -7 /c "cmd /c del @FILE"
或是列舉出指定目錄下的檔案(非目錄)的名稱列出:
forfiles /p c:\ /c "cmd /c if @isdir==FALSE echo @FILE"
請注意上面的 "FALSE" 要大寫!

====================================================

轉自 http://sct55014.blogspot.tw/2015/04/windows-batch-n.html

windows batch 刪除n天前的舊檔
例如:
在d槽目錄tttt含子目錄將365天前的資料刪除

forfiles /p "d:\tttt" /s /d -365 /c "cmd /c echo deleting @file ... && del /f @path"


Syntax

         forfiles [/p Path] [/m SearchMask] [/s] [/c Command] [/d[{+ | -}] [{MM/DD/YYYY | DD}]]
Parameters

/p Path
指定您要在其上開始搜尋的 Path。預設資料夾為目前的工作目錄,您可以透過輸入句點 (.) 來指定。
/m SearchMask
依據 SearchMask 來搜尋檔案。預設的 SearchMask 為 *.*。
/s
指示 forfiles 在子目錄中搜尋。
/c Command
在每個檔案上執行指定的 Command。您必須將帶有空格的命令字串包含在引號中。預設的 Command 為 "cmd /c echo @file"。
/d[{+ | -}] [{MM/DD/YYYY | DD}]
選取日期大於等於 (+) 或小於等於 (-) 指定日期的檔案,其中 MM/DD/YYYY 是指定的日期,而 DD 是目前日期減去 DD 天。如果您未指定 + 或 -,則會使用 +。DD 的有效範圍為 0 - 32768。
/?
在命令提示字元上顯示說明。
Remarks


Forfiles 最常使用於批次檔案中。

Forfiles /s 與 dir /s 類似。

下列表格列出了您可以在 /cCommand 命令字串中使用的變數。
變數
描述
@file
檔案名稱
@fname
不含副檔名的檔案名稱
@ext
副檔名
@path
檔案的完整路徑
@relpath
檔案的相對路徑
@isdir
如果檔案類型是目錄,則判斷值是 TRUE,否則判斷值是 FALSE。
@fsize
檔案大小 (以位元組為單位)
@fdate
檔案上的上次修改日期戳記
@ftime
檔案上的上次修改時間戳記


使 用 forfiles,您可以在多個檔案上執行命令,或將引數傳送到多個檔案。例如,您可以在樹狀目錄中帶有 *.txt 副檔名的所有檔案上執行 TYPE 命令。或者,您可以執行 C: 磁碟機上的每個批次檔案 (*.bat),以檔案名稱 Myinput.txt 作為第一個引數。

使用 forfiles,您可以執行下列任何一項動作:

使用 /d 按絕對或相對日期選取檔案。

使用變數,例如 @fsize (檔案大小) 及 @fdate (檔案日期),來建立檔案的保存樹狀目錄。

使用 @isdir 變數以從目錄中區分檔案。

藉由在命令列中包含特殊字元,及使用十六進位字碼 0xHH 包圍字元,來格式化輸出。

Forfiles 藉由執行工具 (設計用於僅處理單一檔案)上的 recurse subdirectories 旗標來運作。
Examples

若要列出 C: 磁碟機上的所有批次檔案,請輸入:
forfiles /p c:\ /s /m *.bat /c "cmd /c echo @file is a batch file"
若要列出 C: 磁碟機上的所有目錄,請輸入:
forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
若要列出 C: 磁碟機上 100 天之前的所有檔案,請輸入:
forfiles /p c:\ /s /m *.* /dt-100 /c "cmd /c echo @file :date >= 100 days"
若要列出 C: 磁碟機上 1993 年 1 月 1 日之前的所有檔案,再為這些檔案顯示 "file is quite old!",請輸入:
forfiles /p c:\ /s /m *.* /dt-01011993 /c "cmd /c echo @file is quite old!"
若要列出 C: 磁碟機上所有檔案的所有副檔名(按欄位格式),請輸入:
forfiles /p c:\ /s /m *.* /c "cmd /c echo extension of @file is 0x09@ext0x09" With:
若要列出 C: 磁碟機上的所有批次檔案,請輸入:
forfiles /p c:\ /s /m *.bat /c "cmd /c echo @file is a batch file"
若要列出 C: 磁碟機上的所有目錄,請輸入:
forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
若要列出 C: 磁碟機上 100 天之前的所有檔案,請輸入:
forfiles /p c:\ /s /m *.* /d t-100 /c "cmd /c echo @file :date >= 100 days"
若要列出 C: 磁碟機上 1993 年 1 月 1 日之前的所有檔案,再為這些檔案顯示 "file is quite old!",請輸入:
forfiles /p c:\ /s /m *.* /d t-01011993 /c "cmd /c echo @file is quite old!"
若要列出 C: 磁碟機上所有檔案的所有副檔名(按欄位格式),請輸入:
forfiles /p c:\ /s /m *.* /c "cmd /c echo extension of @file is 0x09@ext0x09"    

#Windows Oracle 相關應用
將7天前的Oracle archived log 資料刪除
C:\forfiles -pE:\oracle\oradata\archivelog -d-7 -c"CMD /C del @FILE"
刪除目錄
forfiles /p "h:\tel" /s /d -122 /c "cmd /c echo deleting @file ... && rmdir /s/q @path"
刪除檔案不含子目錄
forfiles /p "c:\tel"  /d -30 /c "cmd /c echo deleting @file ... && del /f @path"
參考:http://blog.xuite.net/m740138.m740138/blog/126655399-forfiles%E6%8C%87%E4%BB%A4


=======================================================
轉自 http://www.dotblogs.com.tw/killysss/archive/2013/06/10/105423.aspx

[DOS]刪除N天前修改的檔案

紀錄一下過程
問題描述
磁碟機空間不夠用,需要清出磁碟空間
解決方式
經分析後將不用的暫存檔案砍掉
暫存檔案分散在固定目錄的子資料夾底下
決定將建立修改日期早於一年的資料檔刪除
實作步驟
寫一隻排程去定期刪除檔案(早於一年份的資料)
原始批次檔如下
1@title 清除磁碟空間
2rem   iniPath1:上版檔案的位置1
3set  iniPath1=E:\Portal\上版資料區
4
5attrib -R %iniPath1%\*.* /S /D
6forfiles /p "%iniPath1%" /s /d -365 /c "cmd /c del /q @path"
發現隱藏及系統檔案無法處理
調整批次檔[在 attrib加入-S(去除系統)及-H(去除隱藏)]如下
1@title 清除磁碟空間
2rem   iniPath1:上版檔案的位置1
3set  iniPath1=E:\Portal\上版資料區
4
5attrib -S -H -R  %iniPath1%\*.* /S /D
6forfiles /p "%iniPath1%" /s /d -365 /c "cmd /c del /q @path"
結果畫面
很成功
參考資料