Svn 使用非完整windows文件路径批量获取文件的父目录
我正在尝试开发用于svn的预提交脚本 以下是批次代码: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 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.简单地描述你的业务任务,我懒得去摸索你的代码