从批处理文件中的给定文件夹中获取一个扩展名为*.nupkg的文件名



我是windows批处理编程的新手。以下是我的代码

@echo off
setlocal
set sourcedir=C:ProjectsLibraries
set pdbdir=C:ProjectsAppbinDebugnet461
set dlldir=C:Usersradiraju.nugetpackages
@echo Cleaning up the solution. Please wait...
FOR /d %%F IN (%sourcedir%*) DO (del /q /s %%Fbindebug 1>nul)
@echo Cleaning up completed. Rebuild Started.
FOR /f %%F IN ('dir /ad /b %sourcedir%*') DO (
if not "%%F"==".vs" (
cd %sourcedir%%%F
dotnet pack
xcopy %sourcedir%%%Fbindebugnet461%%F.pdb %pdbdir% /Y
del /q %sourcedir%%%Fbindebug*.symbols.nupkg 1>nul
FOR /F "tokens=*" %%I IN ('dir /b /a-d %sourcedir%%%Fbindebug') DO (
set _ver=%%I)
xcopy %sourcedir%%%Fbindebugnet461%%F.dll %dlldir%%%F%_ver%libnet461 /Y
)
)

在最后一个语句中,我得到%_var%为空。不知道为什么。

FOR /F "tokens=*" %%I IN ('dir /b /a-d %sourcedir%%%Fbindebug') DO (
set _ver=%%I)

将把_ver(而不是_var)设置为在目录中找到的最后一个文件名注意:NTFS卷的默认顺序是NAME顺序。FAT卷中的订单未定义

xcopy %sourcedir%%%Fbindebugnet461%%F.dll %dlldir%%%F%_ver%libnet461 /Y

您似乎希望使用上一个逻辑语句中设置的_ver的值。请阅读延迟扩展。第一次解析块时,块中任何%var%的值都将替换为该变量的值,而不是该变量的运行时值。

要使用变量的运行时值,需要调用delayedexpansionAND,然后使用!var!代替%var%,或者可以在单独的子例程中调用命令,或者可以使用动态标志:

del /q %sourcedir%%%Fbindebug*.symbols.nupkg 1>nul
set "flag=Y"
FOR /F "tokens=*" %%I IN ('dir /b /a-d /O-N %sourcedir%%%Fbindebug') DO if defined flag (
set "flag="
xcopy %sourcedir%%%Fbindebugnet461%%F.dll %dlldir%%%F%%Ilibnet461 /Y
)

注意:flag被设置为某个值(任何值,只要它被设置),然后FOR %%I被调用,dir列表按相反的名称顺序(/O-N),这样所需的元素就会首先出现(如果更合适的话,/O-D会产生相反的日期顺序)。当FOR %%I返回第一个元素时,则清除flag,并使用版本调用xcopy在CCD_ 16中。由于flag被清除,那么if defined将阻止xcopy进入更多的目录条目。(if defined对变量的运行时间值进行运算)

还请注意,如果需要,您可以使用/i开关修改if,使其不区分大小写。

相关内容

最新更新