Articles of shell

Unix版本的Windows touch命令从文件名部分修改文件的修改date

我有这个bash脚本循环通过当前目录中的文件 ,并从文件名中提取date部分 ,然后使用(Unix) touch命令修改(或更新)该文件的修改date ( mtime )到该date。 文件名示例 Electric company name – bill – 2014-03-22.pdf Bash脚本: 我将这个bash脚本保存为_save_file_mtime_from_filename.sh (将chmod +x添加到该脚本中)并放入要更改文件修改时间的目录中。 然后从命令行运行它。 #!/bin/bash CURRENT_DIR=$(dirname $_) cd $CURRENT_DIR for f in * do # Strip the file extension d=${f%.*} # Strip the last 10 characters d=${d:${#d}-10} # Check the format / mask if [[ $d = ????-??-?? ]] […]

命令提示符:从任何文本文件执行命令(不包含“.bat”或“.cmd”扩展名)

我无法find任何方法,例如: cmd.exe /C "script.txt" 换句话说,如果包含有效的批处理脚本代码,我需要命令提示符(尝试)执行带有任何扩展名(不一定是.bat或.cmd )的文件。 我正在寻找类似Unix shell的行为: ./script.txt 而在Unix上, shebang ( #!/bin/sh )负责理解文件实际上是一个脚本,看起来像在Windows上.bat或.cmd扩展名扮演同样的angular色,表示命令提示符的批处理脚本文件。 是否有可能避免这种情况,并强制命令提示符解释一个任何名称的文件? 注意:请不要这样的答案: 给你的文件.bat或.cmd扩展名。 这不是问题的关键。

Windowsregistry文件关联菜单

我最近(今天)开始在delphi内部使用我的registry进行pipe理。 :)一切工作正常,我的自定义文件types现在打开我的程序,但有2个问题,我不能解决。 1)我想select“打开”从所有文件types,所以我补充说 reg := TRegistry.Create; reg.RootKey := HKEY_CLASSES_ROOT; reg.LazyWrite := false; reg.OpenKey('*\OpenWithList\EncryptionSystem', true); reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"'); reg.CloseKey; reg.free; 如果我在registry中使用registry编辑器它肯定有,因为它应该似乎是,但是当我右键单击文件,并select打开它不存在… 所以我加了这个 reg.OpenKey('*\shell\Encrypt\command', true); reg.WriteString('','C:\Program Files\EncryptionSystem\EncryptionSystem.exe "%1"'); reg.CloseKey; 这对每个文件都有效,但是选项在“打开”和“编辑”的顶部。 我有点希望它出现在像大多数程序一样的菜单子部分…我意识到我需要玩Shellext,但我不明白这些如何与上下文菜单处理程序的结构…我学会了所有无论如何,我已经从registry中读取了…我知道shellext的名字后面出现在“。*”后面,但是对于大字符键的含义我不知道。

Windows:使用(非默认)shell动词(如.bat或命令行中的“编辑”)启动文件

我怎样才能用命令行或者.bat脚本中的“编辑”,“打印”等命令,通过使用标准的Windows方式来启动一个关联的非默认命令(shell动词)。 (在Windows资源pipe理器中右键单击某个文件时,可以获得的额外操作。) 从而得到的效果 python -c "import os;os.startfile('somepic.png', 'edit')" (ShellExecuteEx),但不使用额外的工具,如Python,PowerShell等。 START命令似乎没有提供。

Tar和–newer / – 以后的参数

我的项目结构如下: -sprint41 -file1 -file2 -sprint40 -file1 -file2 我在sprint41文件夹中的所有文件(+ sprint41)的修改date为20130807 我在sprint40文件夹中的所有文件(+ sprint40)的修改date为20130610 我想在20130715之后创build一个包含所有文件(+文件夹)的存档。我的命令如下: tar -cf test.tar –after-date 20130715 * 在这个命令之后,test.tar包含以下内容: -sprint41 -file1 -file2 -sprint40 即使修改date在20130715之前,它仍保留sprint40文件夹 我期待有以下几点: -sprint41 -file1 -file2 你有线索吗? 非常感谢

运行git bash脚本的Windows快捷方式

假设我有一个运行服务器和安装Git Bash的test.sh脚本,如何创build一个Windows快捷方式,我可以双击运行在前台的Git Bash中的tesh.sh,并允许我看到服务器的输出?

我怎么知道一个目录真的是一个回收站?

我需要一个函数,给定一个path,告诉我它是否是一个回收站文件夹。 我试着用CSIDL_BITBUCKET使用像SHGetSpecialFolderPath函数,但是这不起作用,因为回收站是一个虚拟文件夹,它是所有驱动器的回收站的联合。 这个问题是要logging在http://blogs.msdn.com/oldnewthing/archive/2008/09/18/8956382.aspx发布的回复

如何将文本/纯文本转换为文本/ x.shellscript

我发送一个从Windows机器创build的.sh文件到一个Linux,以便我可以在那里运行它。 问题是,我一直在得到一个错误,称为坏的解释器。但是,当我在linux机器上编写shell脚本时,即使它与从Windows机器发送的代码具有相同的代码,它也不会遇到任何问题。 经过我的指导,我发现windows machine .sh脚本是一个文本/纯文件(使用文件-bi),另一个来自linux机器是一个文本/ x.shellscript。 有没有办法将文本/纯文本转换为文本/ x.shellscript? 谢谢 这是脚本: #!/bin/bash date sudo apt-get update 我尝试了一个解决scheme,通过在只包含一个linux盒子中做另一个.sh文件 #!/bin/bash 然后,Windows机器只发送一个包含testing命令的文件,如: date hostname 然后我把这个文件从windows的窗口中添加到linux里 cat windows.sh >> linux.sh 如果我运行linux.sh,它不起作用。 它说错误如下: ./linuxh.sh: line 2 $'date\r':command not found ./linuxh.sh: line 2 $'hostname\r':command not found 但是,如果我打开Linux.sh,然后再次保存而不做任何事情。 有用

基于多种模式重命名文件的更好方法

我下载的很多文件都有垃圾文件,例如 [ www.crap.com ] file.name.ext www.crap.com – file.name.ext 我提出了两种方法来处理它们,但是它们都显得很笨重: 参数扩展: if [[ ${base_name} != ${base_name//\[+([^\]])\]} ]] then mv -v "${dir_name}/${base_name}" "${dir_name}/${base_name//\[+([^\]])\]}" && base_name="${base_name//\[+([^\]])\]}" fi if [[ ${base_name} != ${base_name//www.*.com – /} ]] then mv -v "${dir_name}/${base_name}" "${dir_name}/${base_name//www.*.com – /}" && base_name="${base_name//www.*.com – /}" fi # more of these type of statements; one for each type […]

当单击文件夹的空白部分时,Windows shell将项目添加到上下文菜单

对不起,如果这之前已经问过,我一直在环顾四周,很难find我想要的。 我知道如何将上下文菜单项添加到文件夹,如下所示: [HKEY_CLASSES_ROOT\Folder\shell\console2] @="Open Console2 Here" [HKEY_CLASSES_ROOT\Folder\shell\console2\command] @="C:\\Program Files\\Console\\console.exe -d \"\"%1\"\"" 但是,这只适用于右键单击文件夹。 我希望它可以在文件夹内,然后单击该文件夹的空白部分,并获取上下文菜单项。 我也尝试了HKEY_CLASSES_ROOT\Directory\shell ,但它也是一样的。