1

我有一个批处理文件(见下面的代码)。因为 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"   
4

3 回答 3

4

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

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

你只需要:

call %VS100COMNTOOLS%\vsvars32.bat

或者

call %VS100COMNTOOLS%\..\..\VC\vcvarsall.bat x86
于 2012-04-20T19:22:14.107 回答
0

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

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

并且您可以尝试像这样删除 dbl "": call %comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 这可能会将 cmd 语句破坏为错误由于空间未转义而导致的参数

可能在调用线之后立即测试 %errorlevel%

最后一招,将调用语句中的 /k 更改为 /c。

发布结果

于 2012-04-20T19:13:48.200 回答
0

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

电话应答对我不起作用。

于 2012-04-23T13:50:40.753 回答