2015-08-08 56 views
2

的我的文件名包含有點標準化的前綴。通常,格式是yyyy-99999-xx如何批量基於列表(TXT)複製文件前綴

文件名的例子:

2015-12345-NY-0 Coney Island 
2015-12345-NY-1 Coney Island 
2015-54321-NY Coney Island 

正如你可以看到,可以有包含相同字符1n多個文件。我想通過搜索包含在.txt文件列表中的前綴來複制文件夾中的文件。

基本上,我想「細化/擴大」的Batch: Copy a list (txt) of files顯示的,以致file-list.txt過程 - 我已經改爲Prefix-List.txt - 僅包含文件的文件名「前綴」複製。我不得不改變XCOPY開關/K以複製任何文件。

此外,我想錯誤重定向到Errors.txt

「很高興有」將被包括在搜索子文件夾。

使用我上面的文件名的例子:

2015會複製3個文件。
2015-12345-NY會複製2個文件。
2015-12345-NY-1會複製1個文件。

這是我.ba​​t文件

set src_folder=d:\JAR\source 
set dst_folder=d:\JAR\destination 
for /f "tokens=*" %%i in (File-list.txt) DO (
    xcopy /K "%src_folder%\%%i" "%dst_folder%" 
) 

漁業部的解決方案正是我問。現在我想通過更改目標目錄名稱&添加一個日期時間前綴來擴展一點。

我有2個問題
1.如何獲得星期一= 08(而不是8月)?
2.什麼是MKDIR使用變量的語法?

下面是我使用的編碼(從Windows batch: formatted date into variable修改)。

@echo off 
setlocal 
for /f "skip=8 tokens=2,3,4,5,6,7,8 delims=: " %%D in ('robocopy /l * \ \ /ns /nc /ndl /nfl /np /njh /XF * /XD *') do (
set "dow=%%D" 
set "month=%%E" 
set "day=%%F" 
set "HH=%%G" 
set "MM=%%H" 
set "SS=%%I" 
set "year=%%J" 
SET "DESTINATION=%%J%%E%%F%%G%%H%%I-EXTRACTION" 
) 

echo Day of the week: %dow% 
echo Day of the month : %day% 
echo Month : %month% 
echo hour : %HH% 
echo minutes : %MM% 
echo seconds : %SS% 
echo year : %year% 
echo DESTINATION : %DESTINATION% 

endlocal 

MKDIR {"%DESTINATION%"} 
+0

只有粗略的樣子,如果這些都是前綴,那麼需要指定通配符。 'xcopy/K「%src_folder%\ %% i *」「%dst_folder%」)' – lit

回答

0

這沒有太多的測試,但它可能指向正確的方向。

set src_folder=d:\JAR\source 
set dst_folder=d:\JAR\destination 
for /f "tokens=*" %%i in (File-list.txt) DO (
    for /f "usebackq tokens=*" %%k in (`dir /s /b "%src_folder%\%%i*") DO 
     xcopy /K "%%k" "%dst_folder%" 
    ) 
) 
0

這是我與評論這個小批處理文件建議:

@echo off 
rem Define source and destination directory. 
set "src_folder=d:\JAR\source" 
set "dst_folder=d:\JAR\destination" 

rem Delete error log file from a previous run. 
del Errors.txt 2>nul 

rem Copy all files in all subdirectories matching 
rem any prefix string in prefix list text file. 
for /F "delims=" %%i in (Prefix-List.txt) do (
    xcopy "%src_folder%\%%i*" "%dst_folder%" /C /H /I /K /Q /R /S /Y >nul 2>>Errors.txt 
) 

rem Delete Errors.txt if it is empty because of no error. 
for %%F in (Errors.txt) do if %%~zF == 0 del Errors.txt 

但我懷疑你是真正的快樂與錯誤信息XCOPY錯誤消息是真的不實用,不打印複製的文件以控制並將它們全部重定向到文本文件中。

有關使用命令的詳細信息,打開命令提示符窗口中運行有以下命令和讀取所有輸出幫助頁面。

  • del /?
  • for /?
  • if /?
  • set /?
  • xcopy /?

擴展:

  1. 使源文件夾變量通過第一個參數傳遞給執行中的批處理文件。
    如果在沒有參數的情況下執行批處理文件,則顯示錯誤消息。
    如果指定的源文件夾不存在,則顯示錯誤消息。

  2. 前綴yyyy-mm-dd_用於獨立於本地日期格式的目標目錄。

上面的批處理文件的該修改版本包括所述兩個擴展:

@echo off 
rem Check first parameter of batch file. 
if "%~1" == "" goto NoSourceFolder 
if not exist "%~1" goto SourceNotExist 
if not exist Prefix-List.txt goto NoPrefixList 

setlocal 
rem Define source directory based on parameter. 
set "src_folder=%~1" 

rem Get local date and time in a language independent format. 
for /F "tokens=2 delims==." %%T in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "LocalDate=%%T" 

rem Define local date in format yyyy-mm-dd. 
set "LocalDate=%LocalDate:~0,4%-%LocalDate:~4,2%-%LocalDate:~6,2%" 

rem Define destination directory with date prefix. 
set "dst_folder=d:\JAR\%LocalDate%_destination" 

rem Delete error log file from a previous run. 
del Errors.txt 2>nul 

rem Copy all files in all subdirectories matching 
rem any prefix string in prefix list text file. 
for /F "delims=" %%i in (Prefix-List.txt) do (
    xcopy "%src_folder%\%%i*" "%dst_folder%" /C /H /I /K /Q /R /S /Y >nul 2>>Errors.txt 
) 

rem Delete Errors.txt if it is empty because of no error. 
for %%F in (Errors.txt) do if %%~zF == 0 del Errors.txt 
endlocal 
goto :EOF 

:NoSourceFolder 
echo %~nx0: Missing source folder name as first parameter. 
goto HaltOnError 

:SourceNotExist 
echo %~nx0: There is no folder "%~1". 
goto HaltOnError 

:NoPrefixList 
echo %~nx0: There is no file "%CD%\Prefix-List.txt". 

:HaltOnError 
echo. 
pause 

由於去Jay爲答案上How to get current datetime on Windows command line, in a suitable format for using in a filename?

要詳細瞭解%~1和在命令提示窗口%~nx0運行call /?並讀取所有輸出幫助頁面,並閱讀What does %~dp0 mean, and how does it work?

+0

如何修改爲 1.將Source目錄設置爲變量;在運行時提供? 2.爲目標文件夾名稱添加一個yyyy-mm-dd前綴? – jarhtmd