2015-07-28 26 views
0

我想寫一個創建文件夾(如果不存在)的批處理文件並將某個文件複製到該文件夾​​中。到現在爲止還挺好。在路徑中創建帶有通配符的文件夾的批處理文件

問題是路徑中的一個文件夾會隨時發生輕微變化,所以需要使用通配符。

下面的代碼工作得很好,但顯然錯過了創建文件夾(報告)。所以,如果文件夾不在那裏,它什麼都不做。

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\

任何想法?

+0

爲什麼'&&摹in'?應該是'%% G in'。 – wOxxOm

+0

對不起。錯字。你是對的! – RusselBussel

+0

現在它工作嗎? – wOxxOm

回答

0
  • 添加/d開關for,表示你正在尋找一個目錄,而不是文件
  • 添加*和通配符忽略引號,表示它實際上是一個通配符
  • 無需if exist現在

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

感謝您的回覆。不知何故仍然無法正常工作。保持給我錯誤消息,它不可能創建文件夾。也許簡單地添加一個單獨的代碼片段只會創建文件夾? – RusselBussel

+0

'acn'文件夾始終存在。實際上,除了通配符進入的文件夾之外,其他文件夾都是這樣做的。它的名字包含一個永遠固定的名字和一個不時變化的數字代碼。 – RusselBussel

+0

謝謝!至少該文件夾現在正在創建。不幸的是,'c:\ temp \ Reporting'的內容沒有被複制。 – RusselBussel

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\" 
相關問題