执行批处理文件+调用Visual Studio命令提示符

时间:2012-04-20 13:31:27

标签: tfs batch-file command-prompt

我有一个批处理文件(参见下面的代码)。 因为必须在Visual Studio命令提示符中执行tf命令。 我称之为visual studio命令。

然后批处理文件停止执行。 有人有想法吗?

        REM @echo off
        REM ... Change the path below. This is the path where the code will be downloaded!
        REM Z:
        REM cd Backup_TFS_Preview
        call %comspec% /k ""C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86

        REM ... Navigate to folder
        Z:
        cd Backup_TFS_Preview

        REM ... Makes folder with date today
        mkdir %Date:~-10,2%-%Date:~-7,2%-%Date:~-4,4%

        REM ... Navigate to folder
        cd %Date:~-10,2%-%Date:~-7,2%-%Date:~-4,4%

        REM ... Add workspace for the folder with date of today
        tf workspace /new %Date:~-10,2%-%Date:~-7,2%-%Date:~-4,4% /noprompt

        REM ... Get all items from TFS
        tf get /recursive /all /noprompt

        REM ... Navigate to folder
        cd ..

        REM ... Zip the folder
        C:\TFS_Backup_Scripts\7z.exe a %Date:~-10,2%-%Date:~-7,2%-%Date:~-4,4%.zip %Date:~-10,2%-%Date:~-7,2%-%Date:~-4,4%\

        REM ... Remove folder
        rmdir %Date:~-10,2%-%Date:~-7,2%-%Date:~-4,4%\ /s /q

        REM ... Delete workspace
        tf workspace /delete %Date:~-10,2%-%Date:~-7,2%-%Date:~-4,4% /noprompt

        REM ... Navigate to folder
        cd ..
        cd ..

        REM ... Delete zip files that are older then 10 days 
        forfiles -p "Z:\Backup_TFS_Preview" -s -m *.* -d -10 -c "cmd /c del /q @path"   

3 个答案:

答案 0 :(得分:4)

%comspec%/ k运行另一个命令提示符,然后保留cmd.exe。在cmd.exe返回之前,您的批处理文件将不会继续。

即使用/ c替换/ k(不保留cmd.exe),它也不起作用,因为新命令提示符中的环境变量不会保留在这个中。

你只需要:

call %VS100COMNTOOLS%\vsvars32.bat

或者

call %VS100COMNTOOLS%\..\..\VC\vcvarsall.bat x86

答案 1 :(得分:0)

从cmd提示符执行调用时会发生什么?

还要注意vcvars32.bat的退出代码(0或1)(由vcvarsall.bat调用)所以运行:Echo%errorlevel% 运行vcvarsall.bat后。如果它为零,则命令成功完成。

您可以尝试删除dbl“”,如下所示: 调用%comspec%/ k“C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ vcvarsall.bat”x86 由于没有被转义的空格,这可能会将cmd语句分解为坏的参数

可能会在调用行

之后立即测试%errorlevel%

最后,将/ k更改为调用语句中的/ C.

发布结果

答案 2 :(得分:0)

我以另一种方式解决了它。我使用了tf.exe的完整路径。它在命令提示符下工作。

电话回答对我没用。