只是想知道这里的人们编写的小脚本/程序能够帮助人们完成日常生活(也就是与工作无关).
一切顺利,开创性与否.对我来说,这是一个小蟒蛇脚本来计算给定距离和时间的运行速度.
我的笔记本电脑掉了下来; 所以我编写了一个程序,将200 MS内的两个"0"击键替换为o,两个"0"击键在700 MS之间,彼此为0,忽略其余的; 所以在我更换键盘之前我可以使用笔记本电脑.
哇; 我不知道这会如此受欢迎:p
至于如何 - 微软公开了一个名为"Hooks"的漂亮小API功能.
http://msdn.microsoft.com/en-us/library/ms644959(VS.85).aspx#wh_keyboard_llhook
使用那个钩子; 我能够编写一个"过滤器"来完成我需要它做的事情(提示:如果你返回1,你的回调窗口将不会处理击键).
我之所以知道这个的原因实际上并不是因为我正在写一个键盘记录器 - 而是因为我不久前给Synergy写了一个程序smiler .
是的.我写了另一个程序,用一个随机的字母数字键交换字母数字键,是的; 这真的很有趣:D
我不再有代码了,但是我写的最有用的脚本可能是,不管你信不信,在VBA中.我有一个讨厌的同事谁有这么短的导火索,我称他为樱桃炸弹.当客户打电话然后站起来并开始在我的隔间墙上咆哮时,他经常会生气,从而导致我的工作效率和士气低落.
我一直打开Microsoft Excel.当他这样做的时候,我会用alt-tab到Excel,在工具栏上,有一个带有樱桃炸弹图像的新图标.我谨慎地点击那......没有任何事情会发生.
然而,不久之后我会接到一个电话,并会说"是的,是的,这听起来很糟糕.我最好看一看." 然后我会起床,向樱桃炸弹道歉并走开.
发生的事情是我们使用了NetWare并且它内置了一个原始的消息传递系统.当我点击按钮时,一个小的VBA脚本会向我的朋友发送一条NetWare消息,告诉他们Cherry Bomb再次出现在那里,他们会不会请给我打电话.他从未弄清楚:)
bash脚本叫起来,这样,如果我在/a/very/deeply/nested/path/somewhere
和我想去"向上" ñ目录,我可以输入:up N
#!/bin/bash LIMIT=$1 P=$PWD for ((i=1; i <= LIMIT; i++)) do P=$P/.. done cd $P
例如:
/a/very/deeply/nested/path/somewhere> up 4 /a/very>
由gmatt注意:
通过上面的伟大工作,可以通过将以下内容放入bashrc中来扩展为后退功能:
function up( ) { LIMIT=$1 P=$PWD for ((i=1; i <= LIMIT; i++)) do P=$P/.. done cd $P export MPWD=$P } function back( ) { LIMIT=$1 P=$MPWD for ((i=1; i <= LIMIT; i++)) do P=${P%/..} done cd $P export MPWD=$P }
超级远程复位按钮.
一个超级特殊模拟硬件的机架(当一个房间装满了VME板条箱的时间比你的GPU少)时,世界另一端的用户会在凌晨时分崩溃.进入实验室并通过安检需要一个小时.
但我们不允许连接到超级特殊控制器或修改硬件.解决方案是旧的DEC工作站,带有epson点阵式打印机,在送纸旋钮上粘贴塑料标尺,将打印机放在重置按钮附近.
以普通用户身份登录WS(不允许root,所有外部端口都被锁定),打印带有24条空行的文档 - 旋转进纸旋钮,标尺按下超级特殊硬件上的重置.
在Windows XP上,我已经设置了一个AT作业,每天在C:\中运行此命令
dir /s /b * > dirlist.txt
这将列出C驱动器上所有文件的完整路径.然后每当我需要找到一个文件时,我都可以使用findstr
.这使用Windows资源管理器搜索,因为它允许在整个路径上进行正则表达式匹配.例如:
findstr ".jpg" dirlist.txt findstr /i /r "windows.*system32.*png$" dirlist.txt
这是一个非常快速的设置解决方案,如果您发现自己拥有全新的Windows安装且没有互联网连接,那就太棒了.
如果您需要在某些文件类型中搜索某些模式,请首先列出您需要检查的所有文件,然后在其中进行搜索.例如,要查找翻转图像的Java或Python程序,可以执行以下操作:
findstr "\.java \.py" dirlist.txt > narrowlist.txt findstr /i /r /f:narrowlist.txt "flip.*image"
我有一个Python脚本,当我插入数码相机时会自动运行.
它会复制相机上卡上的所有照片,备份它们,然后将它们上传到Flickr.
上传到Flickr片段来自uploadr.py(我不能相信).
这是用于卸载相机的Python代码.它通过SRCDIR进行递归,并在将图像复制到DESTDIR之前为每个图像命名日期和时间.
#!/usr/bin/python import os import string import time import shutil ################################################### __SRCDIR__ = "/mnt/camera" __DESTDIR__ = "/home/pictures/recent" ################################################### def cbwalk(arg, dirname, names): sdatetime = time.strftime("%y%m%d%H%M") for name in names: if string.lower(name[-3:]) in ("jpg", "mov"): srcfile = "%s/%s" % (dirname, name) destfile = "%s/%s_%s" % (__DESTDIR__, sdatetime, name) print destfile shutil.copyfile( srcfile, destfile) ################################################### if __name__ == "__main__": os.path.walk(__SRCDIR__, cbwalk, None)
几年前,我在一些win32 api的帮助下编写了一个winforms应用程序,将自己从计算机中完全锁定了一个小时,这样就会迫使我去锻炼.因为我很懒?不......因为我有个人健身目标.有时你需要一点点开始:)
我写了一个Python脚本,可以访问我阅读的所有网络漫画,并下载任何新的漫画.我每天只运行一次,并且无需单独访问每个站点,只需访问/漫画/文件夹即可.;)
我的.cmd备份脚本.它每晚都在我的服务器上运行,并根据工作日命名备份文件.整整一周的备份多次救了我(和我的家人):
:: Backup args: :: /V Verify? (yes/no) :: /R Restrict access to owner? (yes/no) :: /RS Removable storage? (yes/no) :: /HC Hardware compression (on/off) :: /M Backup type (normal/copy/differential/incremental/daily) :: /L Log file type (f/s/n) :: /D "Description" :: /J "Job-name" :: /F "File-name" SETLOCAL :: ensure that network drives are mounted CALL C:\bat\configs\MapShares-home.cmd echo on set today=%DATE:~0,3% if %today%==Mon set yesterday=0Sunday if %today%==Tue set yesterday=1Monday if %today%==Wed set yesterday=2Tuesday if %today%==Thu set yesterday=3Wednesday if %today%==Fri set yesterday=4Thursday if %today%==Sat set yesterday=5Friday if %today%==Sun set yesterday=6Saturday set configsDir=%~dp0 set storePath=C:\mybackups :: (eg: Monday C files) set title=%yesterday% backup set echo %DATE% %TIME% %title% > "%storePath%\%yesterday%_backup.log" CALL BackupConfigs.bat :: Create new BKF file call C:\WINDOWS\system32\ntbackup.exe backup ^ "@%configsDir%\daily.bks" ^ /V:yes /R:no /RS:no /HC:off /M normal /L:s ^ /D "%title%" ^ /J "%title%.job" ^ /F "%storePath%\%yesterday%.bkf" ^ >> "%storePath%\%yesterday%_backup.log" echo %DATE% %TIME% Completed >> "%storePath%\%yesterday%_backup.log" copy "%storePath%\%yesterday%.bkf" "V:\Backups\NEPTUNE" CALL C:\bat\clean-temps.bat defrag -v C: > "%storePath%\%yesterday%_defrag.log" :: display backup directories start /D"C:\bat\Backups\" checkbkf.bat ENDLOCAL ::pause
"backup.sh",它将目录的内容加起来并将其发送到我的Gmail帐户.
我写了一个脚本,最终每天都在我的团队中使用.当我以前在英特尔工作时,我们有一个应用程序与访问数据库交谈,以获取寄存器信息的转储(我在验证芯片组).它将获取此信息(来自SQL查询)并将其转储为CSV文件,HTML文件和Excel文件.整个过程耗时近2个小时.可不是闹着玩的.不知道为什么花这么长时间.我们会在午餐前一小时开始,去吃午饭,然后回来.
我认为必须有更好的方法来做到这一点.我与维护注册表数据库并从中获取SQL代码的团队进行了交谈.然后我编写了一个perl脚本,它抓取数据并将其输出为CSV,HTML和Excel格式.运行?大约1-2秒.速度提升很快.
我在2006年在伊拉克部署时也写了一些剧本(我在国民警卫队服役了9年 - 12月下台).我们使用了这个名为ULLS-G(单元级物流系统 - 地面)的旧应用程序,该应用程序是用ADA编写的,最初是在DOS上运行的.他们攻击它足以在命令外壳中运行Windows XP.该系统没有鼠标界面.一切都是通过键盘,没有批处理功能.那么假设您想打印所有车辆运营商的许可证?嗯......我们单位有150名士兵,所以花了很长时间.让我们说每个人都有资格使用新车,你想把它添加到每个人的运营商资格中吗?你必须一个接一个地做.
我能够为SAGE数据库找到一个ODBC驱动程序(ULLS-G使用的是什么),因此我编写了能够与SAGE数据库通信的perl脚本.所以花了一个多小时的事情,现在只花了几秒钟.我还使用我的脚本和驱动程序进行报告.我们必须每天早上向营地报告所有信息.其他单位每天早上都会手工写信息.我掀起了一个使用相同驱动程序的Excel宏,并与SAGE数据库交谈并以这种方式更新了Excel电子表格.这是我写过的最复杂,唯一的 Excel宏.它得到了回报,因为他们授予我军队表彰奖章.所以是的,我在军队中获得了编写perl脚本的奖章:)有多少可以这么说?;)
我是一名私人飞行员.我写了几个脚本,从aviationweather.gov获取当地机场的天气信息.它们对于快速回答"今天是飞行的好日子"这个问题非常有用.
一个Greasemonkey脚本,从游戏网站Kotaku.com 删除明显愚蠢的[*]评论.
[*]由常见的拼写错误,全文写作,过度使用"LOL"和类似的启发式识别.
alias dir ='ls -al'是我喜欢的最喜欢的脚本.
一个线程化的HTML刮刀,可以从一个站点下载系列/电影的所有可用字幕,这是一个很难用的(你必须在搜索后点击4次才能进入下载页面,只是为了显示更多的广告).现在我只是提出搜索条件并按下载.
一个perl脚本,它将我当地的Craigslist按选定的类别划分到一个SQL DB中,然后我可以查询它.
V2用计时器更新数据库,如果我对任何查询都匹配,就会提醒我,基本上为我提供了CL的后台代理.
通过拖放重置大量文件.
年龄前我已经制作了一个接受RegEx的小型VBScript并相应地替换了文件名.你只需要删除一堆文件或文件夹.我发现这些年来非常有用.
gist.github.com/15824(请注意,评论为德语)
几个月前在我的博客中发布的帖子已经从我认为很酷的想法变成了我最近在记忆中咳嗽过的最好的小黑客之一.我在这里完整引用它:
==================
我花了很多时间在bash上.对于没有经验的人来说,bash是一个你可以在大多数unix机器上找到的系统,谢天谢地,有些窗口和每台Mac都可以找到.乍一看,它只不过是一个命令行界面,因此大多数用户看不到他们宁可忘记的不合时宜的东西.
我用bash做了几乎所有事情.我从一条命令行中阅读了我的电子邮件,这就是我避开标记电子邮件的原因.我浏览目录,编辑文件,参与我的每日源代码检查和交付,搜索文件,搜索文件,重启我的机器,甚至偶尔从命令行浏览网页.bash是我数字存在的核心和灵魂.
问题是我一次打开大约6个bash窗口.在今天的工作中,我有一个运行一个Web服务器,另一个运行我的数据库,第三个,第四个和第五个编辑不同的文件,而第六个是通过我的机器试图记录系统上每个文件的名称.为什么?因为如果你想知道在哪里通过文件名找到一个对象,能够搜索这样的档案是很方便的.
当你这样做时,你的控制栏中会有很多名为"bash"的窗口.如果你只有其中一个,这很好,但是当你有6个或更多时,它的痛苦......以及其他二十几个事情.在一个键盘/鼠标对的同时命令下我有三个显示器,我仍然觉得需要更多.每个窗户都有几个打开的bash终端.
所以我把它们搞得一团糟.首先,将这些行放在.bash_profile中:
export PROMPT_COMMAND='export TRIM=`~/bin/trim.pl`' export PS1="\[\e]0;\$TRIM\a\]\$TRIM> " trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG
我经历了几十段关于这一切是如何工作的,以及为什么它的设置方式,但你真的不感兴趣.相信我.关于为什么我...
在第三行上做了"CMD = ; echo ...",书中有一整章.很多人(包括bluehost,托管我的其他域名)仍在使用和旧版本的bash,它们处理陷阱的主要错误,所以我们坚持这一点.你可以删除CMD并用$ BASH_COMMAND替换它,如果你是bash版本的最新版本并且想做研究.
无论如何,我使用的第一个脚本就在这里.它会创建一个包含您的计算机名称和目录的好提示,切换到合理的长度:
============trim.pl=========== #!/usr/bin/perl #It seems that my cygwin box doesn't have HOSTNAME available in the #environment - at least not to scripts - so I'm getting it elsewhere. open (IN, "/usr/bin/hostname|"); $hostname =; close (IN); $hostname =~ /^([A-Za-z0-9-]*)/; $host_short = $1; $preamble = "..." if (length($ENV{"PWD"})>37); $ENV{"PWD"} =~ /(.{1,37}$)/; $path_short = $1; print "$host_short: $preamble$path_short"; ==============================
在这篇博文的顶部有一个警告,你应该在开始问愚蠢的问题之前阅读,"你为什么不通过@ENV使用HOSTNAME环境变量?" 简单:因为这对我尝试过的所有系统都不起作用.
现在真的很酷.还记得.bash_profile添加的第3行吗?
trap 'CMD=`history|~/bin/hist.pl`;echo -en "\e]0;$TRIM> $CMD\007"' DEBUG
它将trim.pl脚本输出转储到与以前相同的容器中,打印到命令提示符和窗口标题,但这次它添加了您刚输入的命令!这就是为什么你不想在你的.bashrc中做所有这些:你运行的任何脚本(在我的机器上,man就是其中之一)将在每一行触发这个东西.我们在这里所做的事情让人的输出严重受挫.我们对终端的表现并不好.
要获取您刚刚输入的命令,我们会记录bash的历史记录并将其略微调整一下:
===========hist.pl============ #!/usr/bin/perl while () { $line = $_ } chomp $line; $line =~ /^.{27}(.*)/; print $1; ==============================
所以现在,我有一个很多的窗口,他们会说:
castro: /home/ronb blog Ron-D630: /C/ronb/rails/depot script/server Ron-D630: /C/ronb/rails/depot mysql -u ron -p Ron-D630: /C/ronb/rails/depot find . > /C/ronb/system.map Ron-D630: /C/ronb/rails/depot vi app/views/cart.html.erb Ron-D630: /C/perforce/depot/ p4 protect Ron-D630: /C/perforce/depot/ p4 sync -f Ron-D630: /C/perforce/depot/
从屏幕底部的快乐小酒吧,我现在可以分辨出哪一个在哪一眼.并且因为我们已经设置了PS1,所以一旦命令完成执行,命令名称将再次被trim.pl的输出替换.
更新(同一天):当我在.bashrc中尝试它时,这些东西(.bash_profile条目)给我带来了各种各样的地狱.每当您将bash作为一种语言调用时,您的.bashrc都由非交互式脚本执行.当我试图使用男人的时候,我打了这个.各种垃圾(我的.bashrc的完整文本,以及转义字符)显示在手册页的顶部.我建议你在命令行上通过一个快速的'man man'调用来测试这个gem.
我想是时候把我的.bashrc中的自定义垃圾拉出来放在它所属的地方了...
不幸的是,我发现自己在这个过程中的某一点上键入了"man trap".
在我以前的工作地点办公时间太荒谬了.这是一家软件公司,我的老板很糟糕.他会在下午5:30左右给我们工作(正好回家的时候),让我们完成工作直到晚上11点(超过我们理想的工作时间).或者他会在仍在进行中的代码中发现恼人的问题.
所以我制作了一个批处理文件和一个脚本,可以在晚上7点到晚上8点之间随机关闭我的电脑.它有一个1分钟的计时器,以防我在下班后停留并需要中止关机过程.
但是我会在下午5点之前离开我的办公桌,所以如果他想在结账时间丢弃废话,他就找不到我.如果他来到我的办公桌上并看到我的电脑,他会认为我仍然在食品室区域附近或在附近的迷你市场上拿一些芯片或东西.但如果它在那个时候关闭,他会打电话给我的手机并告诉我回到办公室.
我还计划在我的机器上安装BIOS,以便在上午8:00或上午9:00左右开启我的机器,以防我感到懒惰,并希望在上午10:00或上午11:00之间漫步.如果我被抓到走到我的办公桌,他会问"你整个上午在哪里?" 我会说"我正在与营销团队会面." 或者"我正在吃早餐."
笨狗
一个快速而肮脏的Python脚本,每隔5秒就会查找一次针对google.com的DNS,如果成功则会查找一次,如果失败则会两次.
我写这篇文章的时候,我不得不忍受一个非常脆弱的家庭网络.它让我立即知道网络的状态,即使我第一次站在房间的桌子底下,双手充满了网线和手电筒.
我曾经在一个技术夏令营工作,我们不得不在本周末为小组中的每个孩子撰写这些文章,然后他们会收到这些文章作为纪念品带回家.通常,这些由一堆通用句子和一到两个个性化句子组成.我写了一个python脚本,用一组句子构造了这些写作中的一个,并允许用户在中间添加几个个性化的句子.这为我和其他心理咨询顾问节省了大量时间.虽然其中很多都是自动化的,但我们的写作仍然看起来比许多"诚实"的更好,因为我们可以将更多时间用于个性化部分.
#! /bin/bash # check to see if site is up # if it is, don't worry # if it's down, restart apache after get a process listing # # v.1 Warren M Myers - initial stab # 31 Aug 06 # ERRCOD='7' WHEN=`date +%d%b%y` REPT="~/psaux.$WHEN.txt" STARS='********************' curl -I http://www.shodor.org > /var/tmp/curlret.txt if [ "$?" = "$ERRCOD" ]; then # return was unable to connect to host: save ps -aux; mail report ps -aux > $REPT echo $STARS echo 'curl return results' echo cat curlret.txt echo echo $STARS echo 'ps -aux results' cat $REPT echo echo $STARS echo 'restarting apache' /etc/init.d/apache2 restart echo 'apache restarted' echo echo "ps -aux results saved in $REPT" fi rm -f /var/tmp/curlret.txt
一个Greasemonkey脚本,用于向在线游戏添加"按下该按钮"控制框.
一个小脚本,可以监控一些热门网站,查找符合我技能的广告并通过电子邮件发送给我.
我用它作为自动加载功能.我可以输入"mycd",然后出现一个我经常cd到的目录列表.如果我碰巧知道那么数字我可以说"mycd 2"之类的东西.要将目录添加到列表,只需键入"mycd/tmp/foo/somedirectory"即可.
function mycd { MYCD=/tmp/mycd.txt touch ${MYCD} typeset -i x typeset -i ITEM_NO typeset -i i x=0 if [[ -n "${1}" ]]; then if [[ -d "${1}" ]]; then print "${1}" >> ${MYCD} sort -u ${MYCD} > ${MYCD}.tmp mv ${MYCD}.tmp ${MYCD} FOLDER=${1} else i=${1} FOLDER=$(sed -n "${i}p" ${MYCD}) fi fi if [[ -z "${1}" ]]; then print "" cat ${MYCD} | while read f; do x=$(expr ${x} + 1) print "${x}. ${f}" done print "\nSelect #" read ITEM_NO FOLDER=$(sed -n "${ITEM_NO}p" ${MYCD}) fi if [[ -d "${FOLDER}" ]]; then cd ${FOLDER} fi }
我喜欢根据拍摄照片的日期将照片存储在目录中.因此,我写了一个程序,扫描存储卡中的图片,根据图片的日期在我的硬盘上创建所需的文件夹,然后将其复制.
写了一个脚本来点击我的开始按钮,然后在半秒内再次点击它,并每30秒重复一次.
让我在工作时保持在线状态,我可以在我旁边的个人笔记本电脑上完成真正的工作.不会被工作软件困扰.
不要告诉老板:)