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

时间:2015-07-28 09:30:38

标签: batch-file wildcard xcopy

我想编写一个创建文件夹的批处理文件(如果它不存在),并将某个文件复制到该文件夹​​中。到目前为止一切都很好。

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

以下代码工作得很好,但很明显错过了创建文件夹(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\

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

  • for中添加*开关,表示您正在寻找目录,而不是文件
  • 添加if exist并在通配符中省略引号以表明它实际上是一个通配符
  • 现在不需要for /d /r "%LocalAppData%\Packages" %%G in (LocalState\acn.*) do xcopy /s /i /y c:\temp\Reporting "%%G\Reports"

    {{1}}

答案 1 :(得分:0)

下一个脚本可以提供帮助。

@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\"