首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用shell脚本运行exe

如何使用shell脚本运行exe
EN

Stack Overflow用户
提问于 2019-01-24 22:07:51
回答 2查看 6.7K关注 0票数 0

我有一个exe,它有两个参数都是csv,如下面的splitline.exe /dir/file1.csv /dir1/file2.csv,这基本上将输入文件中的行拆分为输出file.So中的2行,我写了一个外壳脚本来执行这个exe。目录是固定的,但文件名可以不同,src目录和目标目录中的文件名应该相同。我在windows environment.It上运行它安装了MKS,所以unix和shell脚本也可以执行。下面是我写的代码片段:

代码语言:javascript
运行
复制
#!/bin/sh
 srcdir='D:/srcdir/srcdir1/'

 destdir='D:/destdir/destdir1/'

 extension='csv'

srcfile='${srcdir}/*.csv'

if [[-f ${srcfile} in ${srcdir}]]
  then
   cSplit.exe "${srcdir}/{srcfile}.${extension}" "${destdir}/${srcfile}.${extension}"
    mv "${srcfile}" "${srcdir}/old"
else
    echo "no file"
fi

输出:[[-f : splitty.sh 21 not found其给定输出为"no file“请纠正我的错误,因为我是shell脚本新手

EN

回答 2

Stack Overflow用户

发布于 2019-01-24 23:04:11

这个模板怎么样:

代码语言:javascript
运行
复制
#!/bin/bash
src="D:/srcdir/srcdir1"               # no '/' at the end of dirname
dst="D:/destdir/destdir1"
cd "$src" || exit                     # do nothing if $src is not a directory

for f in *.csv; do
  if [[ "$f" = '*.csv' ]]; then
    echo "no files"
    break
  fi
  if [[ -f "$f" ]]; then
    echo cSplit.exe "$f" "$dst/$f"    # use 'echo' for testing
    echo mv "$f" "$src/old/."         #   aka dry run
  fi
done

注意1:如果您使用的是Windows,那么在bash中使用/是可以的;但是cSplit.exe命令可能不接受/作为目录分隔符。我没有使用Windows,所以我不能检查它。

注2:我不太了解视窗,所以我尽量不使用其他命令,如basename,或find等。至于驱动器名称D:,请检查。也许它被映射到/mnt/d或其他什么地方。

注3:我已经修复了基于Charles评论的脚本。

票数 1
EN

Stack Overflow用户

发布于 2019-01-25 00:00:06

我会用一些类似的东西:

代码语言:javascript
运行
复制
#!/bin/bash
cd 'D:/srcdir/srcdir1/'
find . -maxdepth 1 -name '*.csv' \
  -printf 'Handling %f...' \
  -a -exec cSplit.exe {} 'D:/destdir/destdir1/{}' \; \
  -a -exec mv {} ./old/ \; \
  -a -printf 'done\n'

对于D:/srcdir/srcdir1/目录中的每个.csv文件,这将按顺序执行以下操作:

  • 开始在一行上编写Handling <file name>...
  • Execute cSplit.exe,第一个参数是文件的(相对)路径,第二个参数是位于D:/destdir/destdir1/中的同名文件的路径,该文件位于D:/srcdir/srcdir1/目录下的D:/srcdir/srcdir1/old目录one中,然后在行尾换行。

这些操作使用-a“和”操作数连接在一起,如果前一个操作失败,则不会对文件执行操作(对于cSplit.exe抛出错误的文件,不会从初始目录中删除和备份,并且其行中将缺少"done“)。

如果没有显示任何输出,您将知道没有找到任何文件。如果这还不够,您可以在find命令后添加以下内容(需要与命令末尾在同一行上):| tee | grep '.' || echo 'no file'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54348524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档