我有一个批处理文件(参见下面的代码)。 因为必须在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"
答案 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的完整路径。它在命令提示符下工作。
电话回答对我没用。