在路径中使用通配符创建文件夹的批处理文件
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\
有什么想法吗?
- 在
for
中添加 /d
开关以指示您正在查找目录,而不是文件
- 在通配符中添加
*
并省略引号以表明它实际上是一个通配符
现在不需要if exist
for /d /r "%LocalAppData%\Packages" %%G in (LocalState\acn.*) do xcopy /s /i /y c:\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\SO672436.bat
==>D:\bat\SO672436.bat "LocalState\Cache"
md "C:\Users\UName\AppData\Local\Packages\winstore_cw5\LocalState\Cache\Reports\"
==>D:\bat\SO672436.bat "LocalState\Cache" 2
echo "C:\Users\UName\AppData\Local\Packages\winstore_cw5\LocalState\Cache\"
我想编写一个批处理文件来创建一个文件夹(如果它不存在)并将某个文件复制到该文件夹中。到目前为止一切顺利。
问题是路径中的一个文件夹有时会略有不同,因此需要使用通配符。
以下代码工作正常,但显然无法创建文件夹 (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\
有什么想法吗?
- 在
for
中添加/d
开关以指示您正在查找目录,而不是文件 - 在通配符中添加
*
并省略引号以表明它实际上是一个通配符 现在不需要
if exist
for /d /r "%LocalAppData%\Packages" %%G in (LocalState\acn.*) do xcopy /s /i /y c:\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\SO672436.bat
==>D:\bat\SO672436.bat "LocalState\Cache"
md "C:\Users\UName\AppData\Local\Packages\winstore_cw5\LocalState\Cache\Reports\"
==>D:\bat\SO672436.bat "LocalState\Cache" 2
echo "C:\Users\UName\AppData\Local\Packages\winstore_cw5\LocalState\Cache\"