2012年8月17日星期五

编程语言中的时间戳

如何在不同编程语言中获取现在的Unix时间戳(Unix timestamp)?
Javatime
JavaScriptMath.round(new Date().getTime()/1000)
getTime()返回数值的单位是毫秒
Microsoft .NET / C#epoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000
MySQLSELECT unix_timestamp(now())
Perltime
PHP time()
PostgreSQL SELECT extract(epoch FROM now())
Python先 import time 然后 time.time()
Ruby获取Unix时间戳:Time.now 或 Time.new
显示Unix时间戳:Time.now.to_i
SQL ServerSELECT DATEDIFF(s, '1970-01-01 00:00:00', GETUTCDATE())
Unix / Linuxdate +%s
VBScript / ASPDateDiff("s", "01/01/1970 00:00:00", Now())
其他操作系统
(如果Perl被安装在系统中)
命令行状态:perl -e "print time"
如何在不同编程语言中实现Unix时间戳(Unix timestamp) → 普通时间?
JavaString date = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date(Unix timestamp * 1000))
JavaScript先 var unixTimestamp = new Date(Unix timestamp * 1000) 然后commonTime = unixTimestamp.toLocaleString()
Linuxdate -d @Unix timestamp
MySQLfrom_unixtime(Unix timestamp)
Perl先 my $time = Unix timestamp 然后 my ($sec, $min, $hour, $day, $month, $year) = (localtime($time))[0,1,2,3,4,5,6]
PHPdate('r', Unix timestamp)
PostgreSQLSELECT TIMESTAMP WITH TIME ZONE 'epoch' + Unix timestamp) * INTERVAL '1 second';
Python先 import time 然后 time.gmtime(Unix timestamp)
RubyTime.at(Unix timestamp)
SQL ServerDATEADD(s, Unix timestamp, '1970-01-01 00:00:00')
VBScript / ASPDateAdd("s", Unix timestamp, "01/01/1970 00:00:00")
其他操作系统
(如果Perl被安装在系统中)
命令行状态:perl -e "print scalar(localtime(Unix timestamp))"
如何在不同编程语言中实现普通时间 → Unix时间戳(Unix timestamp)?
Javalong epoch = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse("01/01/1970 01:00:00");
JavaScriptvar commonTime = new Date(Date.UTC(yearmonth - 1, dayhour,minutesecond))
MySQLSELECT unix_timestamp(time)
时间格式: YYYY-MM-DD HH:MM:SS 或 YYMMDD 或 YYYYMMDD
Perl 先 use Time::Local 然后 my $time = timelocal($sec, $min, $hour, $day, $month, $year);
PHPmktime(hourminuteseconddaymonthyear)
PostgreSQLSELECT extract(epoch FROM date('YYYY-MM-DD HH:MM:SS'));
Python先 import time 然后 int(time.mktime(time.strptime('YYYY-MM-DD HH:MM:SS', '%Y-%m-%d %H:%M:%S')))
RubyTime.local(yearmonthdayhourminutesecond)
SQL ServerSELECT DATEDIFF(s, '1970-01-01 00:00:00', time)
Unix / Linuxdate +%s -d"Jan 1, 1970 00:00:01"
VBScript / ASPDateDiff("s", "01/01/1970 00:00:00", time)

2012年8月10日星期五

(转)几种隐藏批处理运行窗口的方法


(1)通过批处理命令实现。缺点:会看到一个窗口一闪而逝。优点:简单,直接添加即可。
@echo off
if "%1"=="h" goto begin
start mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
::以下为正常批处理命令,不可含有pause set/p等交互命令
pause

(2)利用vbs脚本实现隐藏。缺点:调用麻烦点。优点:基本看不到痕迹(非绝对的,指一般用户)
HideRun.vbs
CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0
其中D:/test.bat是你的批处理路径
.....................................................................................................................................
另一思路为把bat转换成vbs,然后vbs生成一个临时bat文件,然后WScript.Shell.Run隐藏启动这个临时bat。

HideRun.bat
echo CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0>$tmp.vbs
cscript.exe /e:vbscript $tmp.vbs
del $tmp.vbs
这个批处理其实不能使其批处理本身隐藏,但是下面大部分隐藏调用批处理的原理和基础。

HideRun.js
new ActiveXObject('WScript.Shell').Run('cmd /c D:/Test.bat',0);
用Javascript有什么好处呢?js的字符串变量可以用单引号,从而方便命令行作为参数调用,而且js很好的支持多行语句用 ; 分隔写成一行。要注意的是:js要区分大小写,方法
必须用括号,结尾必须有分号。所以就成了下面的命令:
mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c D:/test.bat',0);window.close()"



       通常系统管理员会向用户端推送一些脚本并运行,或者拷贝批处理文件到客户端由用户自己运行。但是大部分脚本在运行时会弹出黑色背景的DOS窗口,这会让不少用户不知所
措,甚至误操作关闭正在运行的窗口。好在批处理文件的DOS窗口是可以隐藏的,以下是几种隐藏批处理运行窗口的方法。

1.基础
HideRun.vbs
CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0
其中D:/test.bat是你的批处理路径
另一思路为把bat转换成vbs,然后vbs生成一个临时bat文件,然后WScript.Shell.Run隐藏启动这个临时bat。

HideRun.bat
echo CreateObject("WScript.Shell").Run "cmd /c D:/test.bat",0>$tmp.vbs
cscript.exe /e:vbscript $tmp.vbs
del $tmp.vbs
这个批处理其实不能使其批处理本身隐藏,但是下面大部分隐藏调用批处理的原理和基础。

HideRun.js
new ActiveXObject('WScript.Shell').Run('cmd /c D:/Test.bat',0);
用Javascript有什么好处呢?js的字符串变量可以用单引号,从而方便命令行作为参数调用,而且js很好的支持多行语句用 ; 分隔写成一行。要注意的是:js要区分大小写,方法
必须用括号,结尾必须有分号。所以就成了下面的命令:
mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c D:/test.bat',0);window.close()"

2.用快捷方式
如果要使一个批处理本身隐藏,可以参考附件里的一个快捷方式,修改附件中的相关路径即可隐藏启动你的批处理。可以用vbs来建立一个 .lnk,其实用批处理也行(先echo一个
vbs出来)

3.利用系统服务
可以建立一个系统服务然后启动这个服务来启动批处理。缺点是启动服务较慢,需要管理员权限
runassrv add /cmdline:"C:/Windows/System32/cmd.exe /c D:/test.bat" /name:"mysrv"
net start mysrv

4.利用at计划任务
用at可以建立一个计划任务,在不输入 /interactive 参数可以后台运行。但是建使用at必须有管理员权限
at 09:10 "cmd /c D:/Test.bat"
然后在 9:10 系统就会自动后台以SYSTEM权限运行这个bat


5.利用ftype文件关联
ftype batfile=C:/Windows/System32/mshta "javascript:new ActiveXObject('WScript.Shell').Run('cmd /c%1',0);window.close();"

6.其他用户
Windows 2k/XP支持多用户,如果能在后台登陆另一个账户的桌面然后运行一个批处理,就能完全达到隐藏的目的

7.编译成可执行文件
不少方法可以实现,可以直接利用的工具有 Quick Batch file compiler

带时间点并自动保存文件的ping(批处理)

对于测试或者老化运行的网络设备,不可避免的要用到ping,但windows自动的ping命令,功能太小,不能满足要求。下面的这个批处理可以满足你的要求:

@echo off
setlocal enabledelayedexpansion
mode con cols=30 lines=8
for /f "tokens=1-3 delims=- " %%a in ('date /t') do set date=%%a-%%b-%%c
:start
title=%time%%now%
for /l %%a in (0,1,1) do (
        for /f "tokens=*" %%b in ('ping 220.181.6.175 -n 2 -l 1 -w 1 ^|find /i "Lost" 2^>nul') do (
                set now=%%b
                set "now=!now:*Lost=!"
                if "!now:1=!"=="!now!" (
                        echo %date% %time%, Reply from 220.181.6.175>>ping.txt
                        goto start
                ) else (
                        echo %date% %time%, 220.181.6.175 Request timed out.>>ping.txt
                        goto start
                )
        )
)

使用方法:
1、新建文本文件,将上面代码粘贴进去;
2、修改220.181.6.175为你待测试的ip
3、另存为ping.bat文件
4、双击运行

同文件夹下的ping.txt就是自动生成的文件。

调整窗口大小:
改变这两个数值:cols=30 lines=8

2012年8月8日星期三

bat提取文件名

dir /a/b 指定目录路径 >输出目录路径\1.txt             

如果输出路径为%ComputerName%.txt则命名为计算机名

新建文本文档在文本文档里输入:
dir *.* /a /b /s >1.txt
保存为 提取名字.bat
文件名字被提取到当前文件夹的1.txt里面了!也可以提取某类型的文件比如*.mp3 或者a*.mp3

参 数:
-1 每列仅显示一个文件或目录名称。
-a或--all 下所有文件和目录。
-A或--almost-all 显示所有文件和目录,但不显示现行目录和上层目录。
-b或--escape 显示脱离字符。
-B或--ignore-backups 忽略备份文件和目录。
-c 以更改时间排序,显示文件和目录。
-C 以又上至下,从左到右的直行方式显示文件和目录名称。
-d或--directory 显示目录名称而非其内容。
-D或--dired 用Emacs的模式产生文件和目录列表。
-f 此参数的效果和同时指定"aU"参数相同,并关闭"lst"参数的效果。
-F或--classify 在执行文件,目录,Socket,符号连接,管道名称后面,各自加上"*","/","=","@","|"号。
-g 次参数将忽略不予处理。
-G或--no-group 不显示群组名称。
-h或--human-readable 用"K","M","G"来显示文件和目录的大小。
-H或--si 此参数的效果和指定"-h"参数类似,但计算单位是1000Bytes而非1024Bytes。
-i或--inode 显示文件和目录的inode编号。
-I<范本样式>或--ignore=<范本样式> 不显示符合范本样式的文件或目录名称。
-k或--kilobytes 此参数的效果和指定"block-size=1024"参数相同。
-l 使用详细格式列表。
-L或--dereference 如遇到性质为符号连接的文件或目录,直接列出该连接所指向的原始文件或目录。
-m 用","号区隔每个文件和目录的名称。
-n或--numeric-uid-gid 以用户识别码和群组识别码替代其名称。
-N或--literal 直接列出文件和目录名称,包括控制字符。
-o 此参数的效果和指定"-l" 参数类似,但不列出群组名称或识别码。
-p或--file-type 此参数的效果和指定"-F"参数类似,但不会在执行文件名称后面加上"*"号。
-q或--hide-control-chars 用"?"号取代控制字符,列出文件和目录名称。
-Q或--quote-name 把文件和目录名称以""号标示起来。
-r或--reverse 反向排序。
-R或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。
-s或--size 显示文件和目录的大小,以区块为单位。
-S 用文件和目录的大小排序。
-t 用文件和目录的更改时间排序。
-T<跳格字符>或--tabsize=<跳格字数> 设置跳格字符所对应的空白字符数。
-u 以最后存取时间排序,显示文件和目录。
-U 列出文件和目录名称时不予排序。
-v 文件和目录的名称列表以版本进行排序。
-w<每列字符数>或--width=<每列字符数> 设置每列的最大字符数。
-x 以从左到右,由上至下的横列方式显示文件和目录名称。
-X 以文件和目录的最后一个扩展名排序。
--block-size=<区块大小> 指定存放文件的区块大小。
--color=<列表格式> 培植文件和目录的列表格式。
--full-time 列出完整的日期与时间。
--help 在线帮助。
--indicator-style=<标注样式> 在文件和目录等名称后面加上标注,易于辨识该名称所属的类型。
--quoting-syte=<引号样式> 把文件和目录名称以指定的引号样式标示起来。
--show-control-chars 在文件和目录列表时,使用控制字符。
--sort=<排序方式> 配置文件和目录列表的排序方式。
--time=<时间戳记> 用指定的时间戳记取代更改时间。
--version 显示版本信息。

批量重命名
新建文本文档在文本文档里输入:
@for /f %%a in (A.txt) do @(
if exist %%a for /f %%b in (B.txt) do (
rename %%a %%b))
保存为 批量改名.bat
A.txt 是原来的文件名
B.txt 是修改后的文件名
一行对应一个名字不能有空格同时注意文件属性
a.txt :
NBA直播录像1.3gp
NBA直播录像2.3gp
NBA直播录像3.3gp
NBA直播录像4.3gp
b.txt :
NBA直播录像第一场.3gp
NBA直播录像第二场.3gp
NBA直播录像第三场.3gp
NBA直播录像第四场.3gp

2012年8月2日星期四

linux截图方法―X-Window环境下截图

X-Window环境下截图

1.X-Window中的截图工具 xwdxwudX-Window中自带的截图工具。xwd是一个非常传统的屏幕截图软件,它可以截取程序窗口和全屏图像。xwudX11图形工具客户程序,可以用它来显示由xwd程序创建的图形文件。这两个程序包含在X-Window的标准发布版中。截取图像的方法如下: #xwd > myscreen.xwd 查看图像使用如下命令: #xwud -in myscreen.xwd 实际使用中,可以用xwd结合其它图形转换程序直接获得想要的输出文件。例如: xwd -frame|xwdtopnm|pnmtojpeg>myscreen.jpeg 如果直接写成script,则使用更加方便。例如我的脚本myscreen的文件内容为:

#/bin/bash sleep 5 xwd -screen -root|xwdtopnm|pnmtopng> myscreen.png

2.
GNOME中的软件截图

GNOME 1.4中的选单里,有小程序公用程序→ScreenShooter。这个程序非常好用,可以对整个桌面和单个窗口和桌面区域进行截图,图片默认保存在你登录的目录下。例如用root登录,图片就保存在/root,保存格式为jpg。但是,在Red Hat 8.0GNOME选单中这个程序消失了,不过可以直接运行gnome-panel-screenshot进行截图。

3.KDE中的软件来截图

KDE中包含了一个很好用的截图软件Ksnapshot。这个软件的使用比较直观,其界面如图2。只要在"Delay"框里填上延迟时间,在 "Filename"栏里填上要保存的文件名和路径,然后用鼠标点"Grab"按钮就可以进行抓图了。

点击"Grab"按钮后,Ksnapshot软件的窗口自动最小化到任务栏,同时鼠标变成""字状。这时移动鼠标到其它运行着的程序窗口点一下,就会抓取这个程序的窗口图像;如果是在桌面空白的地方点击,则会抓取到整个屏幕的图像。抓完图后,Ksnapshot的窗口又会弹出来,这时点击"保存(Save"就将抓取的图像保存到指定位置。

4.使用快捷键

Red Hat 8.0的默认配置下,"Alt+PrintScreen"为窗口截图,"PrintScreen"为桌面截图

2012年7月31日星期二

使用命令行从FTP上下载整个目录


wget -m ftp://xxxx/dirname -- ftp-user=user --ftp-password=password
m 参数表示镜像指定的目录 等同于  -r -N -l inf --no-remove-listing
能实现此功能的另一个办法是
wget -rtxx ftp://172.16.12.111/ppp/* 
r是断点绪传,t是失败后可重新联接的xx次。
例如从ftp上直接下载整个目录到本地,我使用的完整命令是
wget  -nH --cut-dirs=1 -m --ftp-user=szh --ftp-password=szhftp ftp://192.168.13.17/Server_CDROM

从ftp下载时与目标路径相关的两个参数:
-nH
       --no-host-directories
           Disable generation of host-prefixed directories.  By default, invoking Wget with -r
           http://fly.srk.fer.hr/ will create a structure of directories beginning with
           fly.srk.fer.hr/.  This option disables such behavior.
--cut-dirs=number
           Ignore number directory components.  This is useful for getting a fine-grained control
           over the directory where recursive retrieval will be saved.

使用命令行从FTP服务器下载文件实例

C:\Users\jackycheungf>ftp 222.242.195.228
  连接到 222.242.195.228。
  220 你Y又来了!!!
  用户(222.242.195.228:(none)): admin
  331 Password required for admin
  密码:
  230 User successfully logged in.
  ftp>
  ftp>
  ftp> dir
  200 Port command successful.
  150 Opening ASCII mode data connection for directory list.
  drwx------ 1 user group              0 Apr 30 10:59 ftp
  -rwx------ 1 user group       17969641 Apr 30 11:23 MPLS和VPN体系结构CCIP版(中
  文).pdf
  226 Transfer complete
  ftp: 收到 146 字节,用时 0.01秒 29.20千字节/秒。
  ftp> ?
  命令可能是缩写的。  命令为:
  
  !               delete          literal         prompt          send
  ?               debug           ls              put             status
  append          dir             mdelete         pwd             trace
  ascii           disconnect      mdir            quit            type
  bell            get             mget            quote           user
  binary          glob            mkdir           recv            verbose
  bye             hash            mls             remotehelp
  cd              help            mput            rename
  close           lcd             open            rmdir
  ftp> mkdir test
  250 Directory created successfully.
  ftp> cd test
  250 "/test" is current directory.
  ftp> lcd f:学习/cisco
  目前的本地目录 F:\学习\cisco。
  ftp> put [www_56cto_com]OReilly.Cisco.IOS.Cookbook.2nd.Edition.Dec.2006.chm
  200 Port command successful.
  150 Opening BINARY mode data connection for file transfer.
  226 Transfer complete
  ftp: 发送 2158287 字节,用时 119.86秒 18.01千字节/秒。
  ftp> dir
  200 Port command successful.
  150 Opening ASCII mode data connection for directory list.
  -rwx------ 1 user group        2158287 Apr 30 12:27 [www_56cto_com]OReilly.Cisco
  .IOS.Cookbook.2nd.Edition.Dec.2006.chm
  226 Transfer complete
  ftp: 收到 120 字节,用时 0.00秒 120000.00千字节/秒。