命令行操作註冊表

Regedit

regedit雖是gui下使用的東東 但其實是有未公開的參數的 可以在cmd下使用
regedit的運行參數
REGEDIT [/L:system] [/R:user] filename1美國商務 3535.us
REGEDIT [/L:system] [/R:user] /C filename2
REGEDIT [/L:system] [/R:user] /E filename3 [regpath]
  /L:system        Specifies the location of the SYSTEM.DAT file.
  /R:user          Specifies the location of the USER.DAT file.
  filename1        Specifies the file(s) to import into the regist
  /C filename2     Specifies the file to create the registry from.
  /E filename3     Specifies the file to export the registry to.
  regpath  Specifies the starting registry key to export from.
                  (Defaults to exporting the entire registry).
  /S  (Windows) Silent - no message on completion.


從Windows命令行快速操作註冊表

 每一個熟悉Windows的人都相信,通過註冊表幾乎可以做到任何事情,真正的問題是怎樣迅速找到正確的註冊鍵。
  絕大多數情形下,操作註冊表意味着找到某個特定的子鍵;偶爾地,可能需要修改一下子鍵的名稱(例如,可能要進行結構上的改動)。那麼,怎樣才能迅速找到正確的子鍵並執行修改?另外,如果你不僅要改動本地機器的註冊表,而且還要對
遠程機器作同樣的修改,
該怎麼辦?本文告訴你一個好工具Regfind。Regfind可以從Windows 2000 Server的Resource Kit Supplement One找到,或者從網上下載。Regfind適用於Windows的各個版本,包括Windows 9x系列。
  Regfind是一個命令行工具。不帶任何選項執行Regfind,它將顯示出幫助信息。最簡單的用法是執行查找,例如執行Regfind "QQ",Regfind將找出所有包含字符串“QQ”的註冊鍵,如圖一所示。
  除了單純的查找之外,Regfind還能夠執行替換:只需在圖一的命令後加上-r選項和一個替換字符串即可。例如,假設你公司的名稱從AGroup改成了BGroup,現在你想要對註冊表中所有的產品註冊信息作相應的改動,只需執行:Regfind "AGroup" -r "BGroup"。注意,如果搜索字符串包含空格或標點符號,字符串應該用引號包圍。
  如果要對一臺遠程機器作相應的改動,只需在前面的命令後加上-m選項並指定遠程機器的UNC(Universal Naming Convention,通用命名協定)路徑,例如:Regfind -m\\server03 "AGroup" -r "BGroup"。
  搜索整個註冊表無疑是一件相當耗費時間的事情。爲了提高效率,你可以將Regfind的搜索操作限制到某個註冊表的分支或子鍵,只需要在-p選項後面指定要搜索的註冊表位置即可。例如,假設要把搜索“AGroup”的操作限制在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft子鍵,並把該子鍵下的AGroup替換成BGroup,執行:Regfind "AGroup" -r "BGroup" -p "HKEY_LOCAL_MACHINESOFTWARE\Microsoft"。
  通過上面的說明可以看出,Regfind是一個很方便的工具,但白璧有瑕,有時候你仍會感到它不能滿足要求。首先,Regfind不支持通配符,也不支持正則表達式——而這兩者對於執行復雜搜索是非常有用的。唯一一個給搜索操作增加靈活性的選項是-y。-y選項使得Regfind的搜索操作對大小寫不敏感,即如果你執行Regfind AGroup -y,則Regfind的搜索結果中將包含AGroup、aGroup以及其他字母大小寫的組合(如果沒有-y選項,Regfind默認對大小寫敏感,但Regfind的命令選項對大小寫不敏感,例如你可以隨意使用-R或-r)。
  第二,如果用Regfind執行搜索/替換操作,它將替換所有找到的字符串,你不能要求Regfind只替換其中一個字符串。勉強可算是補救策略的方法是:將搜索操作限制在某個特定的註冊表分支。因此,我的建議是:首先用Regfind找出所有匹配的註冊子鍵,然後用Regfind執行全局替換或手工修改某個特定的子鍵。
  第三,如果你想要修改數值型數據,Regfind似乎算不上最佳幫手。這是因爲,許多要處理的REG_DWORD值不是0就是1,而0和1在註冊表中出現的機會實在太頻繁了,很可能出現誤替換的情形。解決問題的唯一辦法就是儘可能精確地限定Regfind的搜索範圍
 

命令行方式直接修改註冊表

一、CMD
cmd是windows2000中的一個小得如鴿子蛋一樣的程序,是一個所謂命令行控制檯。有兩條進入該程序的通道:第一,鼠標點擊"開始->運行",在出現的編輯框中鍵入"cmd",然後點擊"確定";第二,在啓動windows2000的時候,按F8進入啓動選擇菜單,移動光條或鍵入數字至安全模式的命令行狀態。出現的窗口是一個在win9x系統常見的那種msdos方式的界面――一個黑乎乎的窗口.甚至還沒有msdos方式的窗口耐看:連常用的工具條都沒有放上.我真想不通,貴爲最新的操作系統,因何還保留似乎是石器時代的dos界面呢?像往常一樣,習慣性低在命令後面鍵入:cmd/?,想看看會提示些什麼?
孰料出現的東西使我大吃一驚:1.這些信息是中文的,要知道原來純dos環境可不會直接支持中文呀!2.有相當詳細的幫助信息.3.界面雖然是命令行的,但卻可以對很多深層次的項目進行操作,,例如修改註冊表等等.後來的使用也證明,cmd實際上也能直接調用圖形界面的程序,並在調用結束後可以返回到命令行界面.
儘管微軟把這個工具當做命令解釋器一個新的實例,但使用的方法卻和原來的dos沒有區別,打開命令行窗口之後,可以找到與dos相同的系統提示符號C:/>,命令必須鍵入在這個提示符的後面,以回車鍵確認.
完整的語法如下:
CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]
各個參數的含義:
CMD:是命令名稱,這可省略.以下是命令所用的參數或開關.
/C 執行字符串指定的命令然後終斷
/K 執行字符串指定的命令但保留
/S 在 /C 或 /K 後修改字符串處理(見下)
/Q 關閉迴應
/D 從註冊表中停用執行 AutoRun 命令(見下)
/A 使向內部管道或文件命令的輸出成爲 ANSI
/U 使向內部管道或文件命令的輸出成爲 Unicode
/T:fg 設置前景/背景顏色(詳細信息,請見 COLOR /?)
/E:ON 啓用命令擴展(見下)
/E:OFF 停用命令擴展(見下)
/F:ON 啓用文件和目錄名稱完成字符 (見下)
/F:OFF 停用文件和目錄名稱完成字符(見下)
/V:ON 將 c 作爲定界符啓動延緩環境變量擴展。如: /V:ON 會
允許 !var! 在執行時允許 !var! 擴展變量 var。var 語法
在輸入時擴展變量,這與在一個 FOR 循環內不同。
/V:OFF 停用延緩的環境擴展。
請注意,如果字符串有引號,可以接受用命令分隔符 '&&' 隔開
的多個命令。並且,由於兼容原因,/X 與 /E:ON 相同,/Y 與
/E:OFF 相同,並且 /R 與 /C 相同。忽略任何其它命令選項。
如果指定了 /C 或 /K,命令選項後的命令行其餘部分將作爲命令行處理;在這種情況下,會使用下列邏輯處理引號字符("):
1. 如果符合下列所有條件,那麼在命令行上的引號字符將被
保留:
- 不帶 /S 命令選項
- 整整兩個引號字符
- 在兩個引號字符之間沒有特殊字符,特殊字符爲下列中的
一個: <>()@^|
- 在兩個引號字符之間有至少一個空白字符
- 在兩個引號字符之間有至少一個可執行文件的名稱。
2. 否則,老辦法是,看第一個字符是否是一個引號字符,如果是,捨去開頭的字符並刪除命令行上 的最後一個引號字符, 保留最後一個引號字符之後的文字。如果 /D 未在命令行上被指定,當 CMD.EXE 開始時,它會尋找以下 REG_SZ/REG_EXPAND_SZ 註冊表變量。如果其中一個或兩個都存在,這兩個變量會先被執行。
HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorAutoRun
和/或
HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorAutoRun
命令擴展是按默認值啓用的。您也可以使用 /E:OFF,爲某一特定調用而停用擴展。您可以在機器上和/或用戶登錄會話上啓用或停用 CMD.EXE 所有調用的擴展,這要通過設置使用REGEDT32.EXE 的註冊表中的一個或兩個 REG_DWORD 值:
HKEY_LOCAL_MACHINESoftwareMicrosoftCommand ProcessorEnableExtensions
和/或
HKEY_CURRENT_USERSoftwareMicrosoftCommand ProcessorEnableExtensions
到 0x1 或 0x0。 用戶特定設置比機器設置有優先權。命令行命令選項比註冊表設置有優先權。
原來的dos中有所謂的內部命令和外部命令,在cmd中,引入了命令行擴展,你可以在cmd窗口中直接執行下面的擴展部分,擴展部分之前不必加cmd.
命令行擴展包括對下列命令所做的更改和/或添加:
DEL 或 ERASE
COLOR
CD 或 CHDIR
MD 或 MKDIR
PROMPT
PUSHD
POPD
SET
SETLOCAL
ENDLOCAL
IF
FOR
CALL
SHIFT
GOTO
START (同時包括對外部命令調用所做的更改)
ASSOC
FTYPE
有關詳細信息,請鍵入 HELP 命令名。
二、REG
可以 WindowsXP提供的reg命令行就可以做到。
Reg添加、更改和顯示註冊表項中的註冊表子項信息和值。
若要查看該命令語法,請單擊以下命令:
reg add
將新的子項或項添加到註冊表中。
語法
reg add KeyName [/v EntryName|/ve] [/t DataType] [/s separator] [/d value] [/f]
參數
KeyName
指定子項的完全路徑。對於遠程計算機,請在 [url=file://\\ComputerName\PathToSubkey]\\ComputerName\PathToSubkey[/url] 中的子項路徑前包含計算機名稱。忽略 ComputerName 會導致默認對本地計算機進行操作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。
/v EntryName
指定要添加到指定子項下的項名稱。
/ve
指定添加到註冊表中的項爲空值。
/t DataType
指定項值的數據類型。DataType 可以是以下幾種類型:
REG_SZ
REG_MULTI_SZ
REG_DWORD_BIG_ENDIAN
REG_DWORD
REG_BINARY
REG_DWORD_LITTLE_ENDIAN
REG_LINK
REG_FULL_RESOURCE_DEscrīptOR
REG_EXPAND_SZ
/s separator
指定用於分隔多個數據實例的字符。當 REG_MULTI_SZ 指定爲數據類型且需要列出多個項時,請使用該參數。如果沒有指定,將使用默認分隔符爲 \。
/d value
指定新註冊表項的值。
/f
不用詢問信息而直接添加子項或項。
/?
在命令提示符顯示幫助。
註釋
該操作不能添加子樹。該版本的 Reg 在添加子項時無需請求確認。
下表列出了 reg add 操作的返回值。 值 說明
0 成功
1 失敗
範例
下列範例說明了如何使用 reg add 命令:
reg add \hklm\software\myco /v data /t reg_binary /d fe340ead
reg add "hkcu\software\microsoft\winmine" /v Name3 /t reg_sz /d Anonymous
reg add "hkcu\software\microsoft\winmine" /v Time3 /t reg_dword /d 5
reg compare
比較指定的註冊表子項或項。
語法
reg compare KeyName1 KeyName2 [/v EntryName | /ve] {[/oa]|[/od]|[/os]|[on]} [/s]
參數
KeyName
指定子項的完全路徑。對於遠程計算機,請在 [url=file://\\ComputerName\PathToSubkey]\\ComputerName\PathToSubkey[/url] 中的子項路徑前包含計算機名稱。忽略 ComputerName 會導致默認對本地計算機進行操作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。如果指定遠程計算機,則只可使用 HKLM 和 HKU 子目錄樹。
/v EntryName
比較子項下的特定項。
/ve
指定只可以比較沒有值的項。
{[/oa]|[/od]|[/os]|[on]}
指定不同點和匹配點的顯示方式。默認設置是 /od。 值 說明
/oa 指定顯示所有不同點和匹配點。默認情況下,僅列出不同點。
/od 指定僅顯示不同點。這是默認操作。
/os 指定僅顯示匹配點。默認情況下,僅列出不同點。
/on 指定不顯示任何內容。默認情況下,僅列出不同點。
/s Separator
比較所有子項和項。
/?
在命令提示符顯示幫助。
註釋
下表列出了 reg compare 操作的返回值。 值 說明
0 比較成功且結果相同。
1 比較失敗。
2 比較成功並找到不同點。
範例
下面的範例說明了如何使用 reg compare 命令:
reg compare "hkcu\software\microsoft\winmine" "hkcu\software\microsoft\winmine" /od /s
reg copy
將一個註冊表項複製到本地或遠程計算機的指定位置。
語法
reg copy KeyName1 KeyName2 [/s] [/f]
參數
KeyName1
指定要複製子項的完整路徑。對於遠程計算機,請在 [url=file://\\ComputerName\PathToSubkey]\\ComputerName\PathToSubkey[/url] 中的子項路徑前包含計算機名稱。忽略 ComputerName 會導致默認對本地計算機進行操作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。如果指定遠程計算機,則只可使用 HKLM 和 HKU 子目錄樹。
KeyName2
指定子項目的地的完整路徑。對於遠程計算機,請在 [url=file://\\ComputerName\PathToSubkey]\\ComputerName\PathToSubkey[/url] 中的子項路徑前包含計算機名稱。忽略 ComputerName 會導致默認對本地計算機進行操作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。如果指定遠程計算機,則只可使用 HKLM 和 HKU 子目錄樹。
/s
複製指定子項下的所有子項和項。
/f
無需請求確認而直接複製子項。
/?
在命令提示符顯示幫助。
註釋
該版本的 Reg 在複製子項時無須請求確認。
下表列出了 reg copy 操作的返回值。 值 說明
0 成功
1 失敗
範例
下列範例說明了如何使用 reg copy 命令:
reg copy "hkcu\software\microsoft\winmine" "hkcu\software\microsoft\winminebk" /s /f
reg copy "hkcu\software\microsoft\winminebk" "hkcu\software\microsoft\winmine" /s
reg delete
從註冊表刪除項或子項
語法
reg delete KeyName [{/v EntryName|/ve|/va}] [/f]
參數
KeyName
指定子項的完全路徑。對於遠程計算機,請在 [url=file://\\ComputerName\PathToSubkey]\\ComputerName\PathToSubkey[/url] 中的子項路徑前包含計算機名稱。忽略 ComputerName 會導致默認對本地計算機進行操作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。
/v EntryName
刪除子項下的特定項。如果未指定項,則將刪除子項下的所有項和子項。
/ve
指定只可以刪除爲空值的項。
/va
刪除指定子項下的所有項。使用本參數不能刪除指定子項下的子項。
/f
無需請求確認而刪除現有的註冊表子項或項。
/?
在命令提示符顯示幫助。
註釋
下表列出了 reg delete 操作的返回值。 值 說明
0 成功
1 失敗
範例
下面的範例說明了如何使用 reg delete 命令:
reg delete "hkcu\software\microsoft\winmine" /v Name1
reg delete "hkcu\software\microsoft\winmine" /v Time1
reg delete "hkcu\software\microsoft\winmine" /va
reg export
將指定子項、項和值的副本創建到文件中,以便將其傳輸到其它服務器。
語法
reg export KeyName FileName
參數
KeyName
指定子項的完全路徑。Export 操作僅可在本地計算機上工作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。
FileName
指定要導出文件的名稱和路徑。該文件必須具有 .reg 擴展名。
/?
在命令提示符顯示幫助。
註釋
下表列出了 reg export 操作的返回值。 值 說明
0 成功
1 失敗
範例
下面的範例說明了如何使用 reg export 命令:
reg export "hkcu\software\microsoft\winmine" c:\data\regbackups\wmbkup.reg
reg import
將包含導出的註冊表子項、項和值的文件複製到本地計算機的註冊表中。
語法
reg import FileName
參數
FileName
指定將複製到本地計算機註冊表中的文件的名稱和路徑。必須預先使用 reg export 命令創建該文件。
/?
在命令提示符顯示幫助。
註釋
下表列出了 reg import 操作的返回值。 值 說明
0 成功
1 失敗
範例
下面的範例說明了如何使用 reg import 命令:
reg import hkcu\software\microsoft\winmine" c:\data\regbackups\wmbkup.reg
reg load
將保存的子項和項寫回到註冊表的不同子項中。其目的是保存到一個臨時文件中,而該文件可用於註冊表項的疑難解答或編輯註冊表項。
語法
reg load KeyName FileName
參數
KeyName
指定子項的完全路徑。對於遠程計算機,請在 [url=file://\\ComputerName\PathToSubkey]\\ComputerName\PathToSubkey[/url] 中的子項路徑前包含計算機名稱。忽略 ComputerName 會導致默認對本地計算機進行操作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。
FileName
指定要加載的文件的名稱和路徑。必須使用帶 .hiv 擴展名的 reg save 操作創建該文件。
/?
在命令提示符顯示幫助。
註釋
下表列出了 reg load 操作的返回值。 值 說明
0 成功
1 失敗
範例
下面的範例說明了如何使用 reg load 命令:
reg load "hkcu\software\microsoft\winminebk2" wmbkup.hiv
reg query
返回註冊表的子項下的項和下一層子項的列表。
語法
reg query KeyName [{/v EntryName|/ve}] [/s]
參數
KeyName
指定子項的完全路徑。對於遠程計算機,請在 [url=file://\\ComputerName\PathToSubkey]\\ComputerName\PathToSubkey[/url] 中的子項路徑前包含計算機名稱。忽略 ComputerName 會導致默認對本地計算機進行操作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。如果指定遠程計算機,則只可使用 HKLM 和 HKU 子目錄樹。
/v EntryName
返回特定的項及其值。該參數只返回直接位於指定子項的下一層中的項。將會找不到當前子項下的子項中的項。如果省略 EntryName,則將返回子項下的所有項。
/ve
指定僅返回爲空值的項。
/s
將返回各個層中的所有子項和項。如果不使用該參數,將只返回下一層的子項和項。
/?
在命令提示符顯示幫助。
註釋
下表列出了 reg query 操作的返回值。 值 說明
0 成功
1 失敗
範例
下面的範例說明了如何使用 reg query 命令:
reg query "hklm\system\currentcontrolset\control\session manager" /v maxstacktracedepth
reg query "hkcu\software\microsoft\winmine" /s
reg restore
將保存的子項和項寫回到註冊表。
語法
reg restore KeyName FileName
參數
KeyName
指定子項的完全路徑。Restore 操作僅在本地計算機上工作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。
FileName
指定將寫回到註冊表中的文件的名稱和路徑。必須使用帶 .hiv 擴展名的 reg save 操作預先創建該文件。
/?
在命令提示符顯示幫助。
註釋
該操作用於覆蓋已編輯的註冊表項。編輯註冊表項之前,請使用 reg save 操作保存父親子項。如果編輯失敗,則可以使用本操作恢復子項。
下表列出了 reg restore 操作的返回值。 值 說明
0 成功
1 失敗
範例
下面的範例說明了如何使用 reg restore 命令:
reg restore "hkcu\software\microsoft\winmine" wmbkup.hiv
reg save
將指定的子項、項和註冊表值的副本保存到指定文件中。
語法
reg save KeyName FileName
參數
KeyName
指定子項的完全路徑。對於遠程計算機,請在 [url=file://\\ComputerName\PathToSubkey]\\ComputerName\PathToSubkey[/url] 中的子項路徑前包含計算機名稱。忽略 ComputerName 會導致默認對本地計算機進行操作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。
FileName
指定所創建的文件的名稱和路徑。如果未指定路徑,則使用當前路徑。
/?
在命令提示符顯示幫助。
註釋
下表列出了 reg save 操作的返回值。 值 說明
0 成功
1 失敗
範例
下面的範例說明了如何使用 reg save 命令:
reg save "hkcu\software\microsoft\winmine" wmbkup.hiv
reg unload
使用 reg load 操作刪除已加載的部分註冊表。
語法
reg unload KeyName
參數
KeyName
指定子項的完全路徑。對於遠程計算機,請在 [url=file://\\ComputerName\PathToSubkey]\\ComputerName\PathToSubkey[/url] 中的子項路徑前包含計算機名稱。忽略 ComputerName 會導致默認對本地計算機進行操作。以相應的子目錄樹開始路徑。有效子目錄樹爲 HKLM、HKCU、HKCR、HKU 以及 HKCC。
/?
在命令提示符顯示幫助。
註釋
下表列出了 reg unload 操作的返回值。 值 說明
0 成功
1 失敗
範例
下面的範例說明了如何使用 reg unload 命令:
reg unload "hkcu\software\microsoft\winminebk2"
小心
編輯註冊表不當可能會嚴重損壞您的系統。在更改註冊表之前,應備份計算機上任何有價值的數據。
小心
只有在別無選擇的情況下,才直接編輯註冊表。註冊表編輯器會忽略標準的安全措施,從而使得這些設置會降低性能、破壞系統,甚至要求用戶重新安裝 Windows。可以利用“控制面板”或“Microsoft 管理控制檯 (MMC)”中的程序安全更改多數註冊表設置。如果必須直接編輯註冊表,則請首先將其備份。詳細信息,請參閱“註冊表編輯器幫助”。
註釋
使用 Reg 直接編輯本地或遠程計算機的註冊表。這些更改有可能造成計算機無法操作並需要重新安裝操作系統。所以不要直接編輯註冊表,而應儘可能利用“控制面板”或“Microsoft 管理控制檯 (MMC)”更改註冊表。
有些操作可以查看或配置本地或遠程計算機的註冊表項,而另外一些則只允許配置本地計算機的註冊表設置。同時,遠程訪問註冊表也可能會限制用於某操作的參數。請檢查每個操作的語法以便驗證該操作可以用於遠程計算機,以及驗證可用於那種情況下的參數。
讓Windows註冊表修改快速生效
 當我們修改了註冊表,許多情況下只按下F5鍵刷新註冊表還不足以使修改生效,而需要重新啓動計算機。其實我們不必每次都重啓機器,只需運行Windows的外殼程序Explorer即可(在Windows 9x/Me和Windows 2000/XP中的操作有所不同)。
  在Windows 9x/Me中
  按下“Ctrl+Alt+Delete”組合鍵,在彈出的窗口中選擇“Explorer”,並點擊“結束任務”按鈕,這時屏幕會出現“關機”菜單,不要做任何操作,在再次彈出的窗口中點擊“結束任務”按鈕,即可讓Windows在不重新啓動的情況下快速刷新註冊表。
  在Windows 2000/XP中
  按下“Ctrl+Alt+Delete”組合鍵,打開“任務管理器”,單擊“進程”標籤,找到並單擊其中的“Explorer.exe”,點擊右下方的“結束進程”按鈕,在打開的警告對話框中單擊“是”按鈕。然後再單擊“應用程序”標籤,單擊下方的“新任務”按鈕,在打開的“創建新任務”對話框中輸入“Explorer.exe”,再按下“確定”按鈕即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章