计划在windows中运行bash shell脚本

计划在windows中运行bash shell脚本,windows,bash,shell,cygwin,Windows,Bash,Shell,Cygwin,A非常感谢您的帮助,如果我的术语不正确,请原谅 这是一个脚本(*.sh文件): 1-转到特定目录a 2-将文件从另一个目录B复制到目录A 3-#出来#它还解压目录A及其子目录中的文件 4-#输出#它还删除dir A中所有*.csv文件的第1-6行和最后一行 #!/bin/bash # Configure bash so the script will exit if a command fails. set -e #cd to the dir you want to copy to: cd

A非常感谢您的帮助,如果我的术语不正确,请原谅

这是一个脚本(*.sh文件):
1-转到特定目录a
2-将文件从另一个目录B复制到目录A
3-#出来#它还解压目录A及其子目录中的文件
4-#输出#它还删除dir A中所有*.csv文件的第1-6行和最后一行

#!/bin/bash

# Configure bash so the script will exit if a command fails.
set -e 

#cd to the dir you want to copy to:
cd /cygdrive/c/path/I/want/to/copy/to
#echo Hello

#cp the files i want 
#include the subdirectories 
cp -r /cygdrive/c/path/I/want/to/copy/from/* .

# This will unzip all .zip files in all subdirectories under this one.
# -o is required to overwrite everything that is in there
#find -iname '*.zip' -execdir unzip -o {} \;

#find ./ -iname '*.csv' -exec sed -i '1,6d;$ d' '{}' ';'
现在,我可以在cygwin中使用该脚本,方法是转到文件存储的目录并发出以下命令:

./filename.sh



我也可以在CMD/Windows DOS中执行以下操作:

C:\cygwin\bin\bash.exe -l 
进入bash终端,然后发出以下命令:

/cygdrive/c/path/where/the/file/is/filename.sh
在任务计划程序(在Windows中)中,我已尝试计划以下内容:

C:\cygwin\bin\bash.exe -l /cygdrive/c/path/where/the/file/is/filename.sh
但这不起作用,即使像我上面所说的那样,在CMD/windowsdos中使用单独的命令

现在我想做的是能够像在windows中使用任务调度器那样调度此脚本(filename.sh),就像调度.vbs或.bat文件一样?有人能对此提出建议吗?

注意:我试图编写一个Windows批处理文件(.bat)来完成这项工作(见下文),但我无法使解压和sed命令正常工作,。因此,我尝试编写上面的bashshell脚本

chdir C:\pointA
C:\cygwin\bin\cp.exe /cygdrive/v/pointB/* .
::find -iname *.zip -execdir unzip {} \;
::find ./ -iname '*.csv' -exec sed -i '1,6d;$ d' '{}' ';' 

为什么不创建一个批处理文件(.bat)来加载cygwin bashscript并计划此批处理文件?这样,您就不必处理M$处理参数的方式了,解决方案是将.sh文件与运行bash的批处理文件关联起来。这样,每当您告诉windows执行sh文件时,它都会使用正确的启动器—无论是通过双击还是计划任务。这是我的:

@echo off

d:
chdir d:\cygwin\bin

bash --login %*
关联文件类型意味着,当您尝试执行该类型的文件时,windows将使用该文件的路径作为传递给指定程序的参数。例如,我将LibreOffice4与.ods文件关联。因此,如果我双击一个.ods文件,或者在命令提示符下输入一个.ods文件的路径,windows将运行OpenOfficeCalc,第一个参数是ods文件。因此,如果我的桌面上有untitle.ods。我双击它。这实际上与打开命令提示符,键入

D:\ProgramFiles(x86)\LibreOffice 4\Program\scalc.exe“C:\Users\Adam\Desktop\Untitled.ods”。

事实上,如果我这样做,就会发生预期的情况:OpenOfficeCalc启动并加载文件。
如果将关联更改为echo.exe(我在D:\cygwin\bin中找到了它),您可以看到它是如何工作的。 如果要回显,请打开命令提示符并键入

“C:\Users\Adam\Desktop\Untitled.ods”

我将看到echo.exe将文件名回显给我

所以我建议你做的是:

  • 创建一个批处理文件,使用cygwin的bash运行bash脚本(或者使用我的)
  • 将.sh文件的关联更改为该批处理文件
  • 直接执行那些.sh文件,就像它们是.exe或.bat文件一样

  • 这就出现了同样的问题。我把它放在脚本的开头,双击*.bat文件后,我会用cygwin CLI打开CMD/DOS窗口。这听起来正确吗?不,将*.sh与批处理文件关联,然后运行你的sh文件。我会编辑我的答案来解释关联文件类型的原因。gothya tks还找到了另一种方法,给出了以下命令wing命令作为任务调度器的一部分运行
    C:\cygwin\bin\bash.exe-C-l'/cygdrive/C/path/where/the/file/is/filename.sh'
    ,但是你不能用这种方式双击.sh文件Tks Adam,但我刚刚发现这有时对我不起作用,如果你愿意评论的话,我已经发布了。我尝试了Adams sugges下面是一个例子。但我不确定我是否完全正确地尝试了。你能给出一个具体的例子吗?我会在早上尝试一下,我现在无法访问windows机器,因为我家里的所有机器都是linux;-)类似的问题问到
    chdir C:\pointA
    C:\cygwin\bin\cp.exe /cygdrive/v/pointB/* .
    ::find -iname *.zip -execdir unzip {} \;
    ::find ./ -iname '*.csv' -exec sed -i '1,6d;$ d' '{}' ';' 
    
    @echo off
    
    d:
    chdir d:\cygwin\bin
    
    bash --login %*