为什么批处理脚本的行为在各种计算机上都不一致?

时间:2015-03-16 15:48:41

标签: windows batch-file

我正在编写一个批处理脚本来自动推送到git(由于我不会进入这里的原因)。

该脚本在我的电脑上工作正常,但在我的同事电脑上无效。它到达MessageBox.exe询问您是否要提交的部分,但在他的PC上我得到错误

find : yes : Cannot find the specified file or directory.

在我的电脑上,脚本运行得很好。我们有相同的操作系统等,所以我不知道从哪里开始。

我知道这是一个非常宽松的问题,而且我是Windows的新手,但任何提示都会很棒。

谢谢!

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
call %~dp0%config.bat

SET scriptPath=%~dp0
SET file=%1

echo Saving current working directory
SET cwd=%cd%

echo Loading SSH key (%SSHKey%)
START "" "%puttyLocation%pageant.exe" "%SSHKey%"

echo Moving to library directory (%libDir%)
cd /D %libDir%

echo Pulling from git....
git pull %remoteName%

echo Changing back to the original directory (%cwd%)
cd /D %cwd%
%easyPCLocation% %file%

echo Moving to library directory (%libDir%)
cd /D %libDir%

git status --porcelain
git status --porcelain > %scriptPath%temp.txt

for %%A in (%scriptPath%temp.txt) do if %%~zA==0 (
    echo.No changes to your library have been made.
) ELSE (
    echo Changes have been made to your library. Please push them to git now.
    !scriptPath!MessageBox.exe "Changes have been made to your library.     Please push them to git now.\n\nWould you like up push to git?" "Library updates detected!" YesNo Question Button1 > %scriptPath%temp2.txt
find "yes" !scriptPath!temp2.txt && (
    !scriptPath!InputBox.exe "Commit message:" "Updating git..." > !scriptPath!temp2.txt
    set /p commitMessage=<!scriptPath!temp2.txt
    echo !commitMessage!
    git add .
    git commit -a -m "!commitMessage!"
    git push
) || (
echo REMEMBER to push changes manually!!!!
    )
  del !scriptPath!temp2.txt
)
del %scriptPath%temp.txt

echo Changing back to the original directory (%cwd%)
cd /D %cwd%

endlocal

1 个答案:

答案 0 :(得分:3)

我建议您的同事已安装 cygwin ,因此find是一个完全不同的可执行文件(locate-a-file。)

我明确指出find,将其替换为%SystemRoot%\System32\find.exe。如果安装并使用Windows&#39;这将绕过cygwin。版本查找。如果没有安装cygwin,使用这个明确的定义是安全的 - 这是Windows使用其正常策略找到可执行文件的地方。