繁体   English   中英

批处理文件,该文件创建路径中带有通配符的文件夹

[英]Batch file that creates folder with wildcard in path

我想编写一个创建文件夹的批处理文件(如果不存在),然后将某个文件复制到该文件夹​​中。 到现在为止还挺好。

问题是路径中的一个文件夹有时会略有不同,因此必须使用通配符。

以下代码可以正常工作,但显然错过了创建文件夹(Reports)的机会。 因此,如果文件夹不存在,则它什么也不做。

for /r "c:\Users\%USERNAME%\AppData\Local\Packages" &&G in ("LocalState\acn\Reports") do @if exist %%G xcopy /s /i /y c:\temp\Reporting "%%G"

完整路径为: c:\\Users\\FSchneider\\AppData\\Local\\Packages\\“WILDCARD"\\LocalState\\acn\\Reports\\

任何想法?

  • 添加/d转换中for ,表示你正在寻找一个目录,而不是一个文件
  • 在通配符中添加*并省略引号,以表明它实际上是通配符
  • 现在不需要if exist

     for /d /r "%LocalAppData%\\Packages" %%G in (LocalState\\acn.*) do xcopy /s /i /yc:\\temp\\Reporting "%%G\\Reports" 

下一个脚本可能会有所帮助。

@ECHO OFF
SETLOCAL enableextensions

set "_fldrtop=%USERPROFILE%\AppData\Local\Packages"

set "_fldrsub=LocalState\acn"
if not "%~1"=="" set "_fldrsub=%~1"     :: my testing data, remove this line

set "_fldrlow=Reports"
if not "%~2"=="" set "_fldrlow=%~2"     :: my testing data, remove this line

for /F "delims=" %%G in ('dir /B /AD "%_fldrtop%"') do (
  if exist "%_fldrtop%\%%G\%_fldrsub%\" (
    if exist "%_fldrtop%\%%G\%_fldrsub%\%_fldrlow%\" (
      echo echo "%_fldrtop%\%%G\%_fldrsub%\%_fldrlow%\"
    ) else (
      echo md "%_fldrtop%\%%G\%_fldrsub%\%_fldrlow%\"
    )
    rem echo xcopy /s /i /y c:\temp\Reporting "%_fldrtop%\%%G\%_fldrsub%\%_fldrlow%\"
  )
)

输出

==>D:\bat\SO\31672436.bat

==>D:\bat\SO\31672436.bat "LocalState\Cache"
md "C:\Users\UName\AppData\Local\Packages\winstore_cw5\LocalState\Cache\Reports\"

==>D:\bat\SO\31672436.bat "LocalState\Cache" 2
echo "C:\Users\UName\AppData\Local\Packages\winstore_cw5\LocalState\Cache\2\"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM