我不知道如何将我拥有的路径名(C:\ Folder1 \ FolderNew3 \ 3.200.25.sql)转换为我要复制的源目录(C:\ Folder1 \ FolderNew3)
我很快就写完了。我从来没有实际批量使用FOR或多IF语句,所以如果这些是错误的,请告诉我原因!
SET BUILD = 3.200.25
FOR /F %%G IN (list.txt) DO CALL :SUBROUTINE %%G
GOTO :eof
:SUBROUTINE
IF %1 == *%BUILD%.sql (
SET BuildLocation=%1
GOTO :CopyFiles
) ELSE GOTO :EOF
:CopyFiles
REM take %BuildLocation% and copy all files in same directory.
REM %BuildLocation% should equal "C:\Folder1\FolderNew3\3.200.25.sql" I want to copy C:\Folder1\FolderNew3\
XCOPY /S /Y [source] C:\MyNewLocation\
REM Example contents of list.txt
REM C:\Builds\Folder2\2.200.25.sql
REM C:\Builds\Folder1\1.200.25.sql
REM C:\Builds\Folder3\SubFolder\3.200.25.sql
我正在将目录列表转储到list.txt,并且正在寻找一组文件和文件夹以及唯一可识别的文件(在本例中为%build%.sql)
构建是唯一标识符,因此它只匹配一次。
我需要复制存储在父目录中的sql脚本旁边的所有文件夹。
父目录位置可能是可变长度的,所以我不能使用delim = \来解析我所知道的路径名。
答案 0 :(得分:1)
要将BuildLocation设置为父目录,请尝试更改此行:
SET BuildLocation=%1
要:
SET BuildLocation=%~p1
从此site:
%~pI - expands %I to a path only