我试图在我打开的绝对记录中找到所有的挂件列表文件,如果在挂件列表中有一些挂件文件,我想执行:eof函数,如果不是,我想要do something。
我试过像这样
@echo off
cls
set P4CLIENT=<Workspace_name>
set P4PORT=<IPadress:port>
set P4USER=%username%
set Depot_Path=//Depoth/path/...
FOR /F "delims=" %%i IN ('p4 opened -u %username% //Depoth/path/...') DO set open_files=%%i
echo %open_files%
if %open_files% =="" (
    echo No file are in pendig list
    goto execute
    ) else (
        echo files are in pending list, please submit them if needed or revert them 
        echo %open_files%
        goto eof
    )
:execute
<Do something>
:eof当我执行上面的脚本时。我可以看到控制台上打印的已打开的文件,但在此之后,以的形式抛出错误的脚本此时是意外的.。
如果我想执行:eof do something函数的摆表中有一些挂起的文件,那么我应该做什么来获得,如果不是,我想要do something
发布于 2021-01-24 16:17:31
免责声明:我非常了解Perforce,但是.bat语法几乎没有。除了迭代p4 opened输出这一非常普遍的概念之外,我并不真正知道这条p4 opened行在做什么。
我认为问题在于,您的脚本希望p4 opened只打印文件名,而实际情况是它会像这样打印输出:
C:\Perforce\test>p4 opened ...
//stream/test/bar#1 - edit default change (text)您所看到的错误可能是由于FOR语句试图解析这一行输出并被-字符绊倒所致。
一个非常简单的解决方法是使用p4的-F全局选项将输出重新格式化为文件路径:
C:\Perforce\test>p4 -F %depotFile% opened ...
//stream/test/bar因此:
@echo off
cls
FOR /F "delims=" %%i IN ('p4 -F ^%depotFile^% opened ...') DO set open_files=%%i
echo %open_files%
if %open_files% =="" (
    echo No file are in pendig list
    goto execute
    ) else (
        echo files are in pending list, please submit them if needed or revert them 
        echo %open_files%
        goto eof
    )
:execute
<Do something>
:eof指纹:
opened
files are in pending list, please submit them if needed or revert them
openedhttps://stackoverflow.com/questions/65872617
复制相似问题