batch-file - 如何从使用 Windows find 命令的 cygwin bash 执行 bat 文件

标签 batch-file cygwin

find 命令在 Windows 和 Unix 中的作用完全不同。在 Windows 上,它是一个类似于 fgrep 的实用程序,列出文件中的匹配行;在 Unix 上以及 Cygwin 上,它列出了符合某些条件的文件名。

Cygwin bash 将其标准目录添加到当前路径,因此 bash $PATH 内部通常是 /bin:/usr/bin:/cygdrive/c/WINDOWS/system32:/cygdrive/c/WINDOWS

开始更新以提供更多详细信息

例如,我有许多使用 gnu find 命令的脚本 - 例如用于清除不包含文件的目录树的脚本:

purge-empty-dirs.sh
find . -depth -type d -empty | xargs rmdir -p

我还有一个 bat 文件来启动我的构建,它使用 Windows find 命令,该命令搜索与字符串匹配的行(类似于 gnu grep)。

build.bat
...
dir | find "target"
if errorlevel = 1 goto no_target_dir
...

现在,为了让我的 bash 脚本正常工作,我需要将 /bin 放在 c:\windows\system32 之前的路径中。但是为了运行我的bat文件,我需要将c:\windows\system32放在/bin之前的路径中

一般来说,我们可以声称所有bat文件都应该在bash继承的原始环境中执行,而不是修改后的环境。这有道理吗?

结束更新

应该是这样,但是破坏了从 bash 执行的 bat 文件。解决这个问题的最佳方法是什么?

有没有办法强制 Cygwin 在其启动环境下执行 bat 文件(甚至所有 Windows 可执行文件)?我正在考虑 cmd.exe 的 start/i 行为。我正在考虑编写自己的 cygstart 之类的实用程序来执行此操作,方法是将环境(或至少 $PATH)保存在 .bash_profile/中.bashrc。那有意义吗?

还有其他建议吗?

编辑:另请参阅Start new cmd.exe and NOT inherit environment

最佳答案

如果你chmod +x your.bat它就可以工作。

./your.bat

通过cmd/c运行

已在 Why is it that Cygwin can run .bat scripts? 中回答

关于batch-file - 如何从使用 Windows find 命令的 cygwin bash 执行 bat 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17582778/

相关文章:

variables - 批处理文件多个标记多个变量

.net - 用于安装或卸载 .NET Windows 服务的批处理脚本

java - Runtime.getRuntime().exec ("C:\cygwin\bin\bash.exe") 没有可读取的输入

gcc - cygwin 中奇怪的无声 cc1plus 错误

terminal - cygwin 中可以使用什么终端库?

batch-file - 拖放多个文件的批处理文件?

windows - 批处理脚本中没有扩展名的文件名

c++ - libshout 构建对 SSL_is_init_finished 的 undefined reference

linux - 为 cygwin 安装选择的最小配置是什么?

batch-file - 在批处理文件中连接到无线网络(一个还不是您的配置文件之一)