Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 使用非完整windows文件路径批量获取文件的父目录_Svn_Batch File - Fatal编程技术网

Svn 使用非完整windows文件路径批量获取文件的父目录

Svn 使用非完整windows文件路径批量获取文件的父目录,svn,batch-file,Svn,Batch File,我正在尝试开发用于svn的预提交脚本 以下是批次代码: svn st | grep "M " | cut -c 8- > modified.txt for /F "tokens=*" %%A in (modified.txt) do ( if not %%A==. ( if %%A==%%A ( set "filepath=%%A" for /f "delims==" %%F in (%filepath%) do ( set "fold

我正在尝试开发用于svn的预提交脚本

以下是批次代码:

svn st | grep "M " | cut -c 8- > modified.txt
for /F "tokens=*" %%A in (modified.txt) do (
  if not %%A==. (
    if %%A==%%A (
      set "filepath=%%A" 
      for /f "delims==" %%F in (%filepath%) do (
        set "foldername=%%~nF"
        echo "Parent Found %foldername% from %filepath%..."
      )
      pause 
      del "\\<intranet share>\<folder>\%foldername%\%%A"
      svn export ".\%%A" "\\<intranet share>\<folder>\%foldername%"
    )
  )
)
svn st|grep“M”cut-c8->modified.txt
对于(modified.txt)do中的/F“tokens=*”%%A(
如果不是%%A==(
如果%%A==%%A(
设置“文件路径=%%A”
对于(%filepath%)中的/f“delims==”%%f,请执行以下操作(
设置“foldername=%%~nF”
echo“父项从%filepath%找到%foldername%…”
)
暂停
删除“\\\%foldername%\%%A”
svn导出“\%%A”“\\\\%foldername%”
)
)
)
输出如下:

C:\Work\>(
设置“foldername=”
从C:\Work\repo\u path\file\u name.php中找到echo“…
)

如您所见,
Found
旁边的变量为空。问题在哪里


感谢您的帮助。

在块语句
(一系列括号内的语句)
中,解析整个块,然后执行。在解析块时,块内的任何
%var%
都将替换为该变量的值——在执行块之前——这同样适用于。。。DO(块)

因此,在遇到
IF
时,将使用
%variables%
的值执行
IF(somethingelse)

克服此问题的两种常见方法是:1)使用
setlocal enabledelayedexpansion
!瓦尔
代替
%var%
以访问
var
的更改值,或2)调用子例程以使用更改的值执行进一步处理

因此,在for/f语句之前,插入一个
setlocalenabledelayedexpansion
,并在循环中的任何地方插入
%var%
,将其更改为
!瓦尔。这不适用于元变量(循环控制变量)
%%A
%%F


另请注意,如果%%A==%%A,则您的语句
-现在
%%A
,如果cmd播放得很好,则应始终等于
%%A
,因此这似乎是一个多余的测试此结构存在危险。由于您使用的是
tokens=*
,因此
%%A
可能包含一个分隔符,通常是一个空格。如果发生这种情况,
cmd
将看到
If two words==two words…
并具有连接。如果“%%A”=“%%A”

我删除了我的答案,因为答案不可行,你可以用
来防止这种情况。在预提交挂钩中有
svnlook
。2.简单地描述你的业务任务,我懒得去摸索你的代码