2011-04-03 75 views
1

大家好 我會很高興得到一些幫助用windows批處理腳本文件來操作圖像, 我正在從舊軟件遷移,它用來保存文件夾中的文件,每個文件都有它的自己的用戶ID(例如10050.jpg) 我喜歡這些圖片的1000,我想的圖像,以新的文件夾與圖像名稱分發和創建SQL文件更新,例如新的軟件:處理大量的1000多個圖像

10050.jpg, 10051.jpg, 10052a.jpg, 10052b.jpg 

會去:

 
/root/10050/10050.jpg 
/root/10051/10051.jpg 
/root/10052/10052a.jpg 
/root/10052/10052b.jpg 

和SQL文件創建:

 
update users set user_img = 10050/10050.jpg where user_id = 10050; 
update users set user_img = 10051/10051.jpg where user_id = 10051; 
update users set user_img_a = 10052/10052a.jpg where user_id = 10052; 
update users set user_img_b = 10052/10052b.jpg where user_id = 10052; 

誰能幫我寫一個批處理文件來提取這些信息? 我是這個級別的初學者。 謝謝!

+1

請編輯您的帖子,你的第一個列表具有10053b,你的第二個10052b,最後的ID爲10050的兩倍 - 所以它不是明確的所有你想要的。 「id」是否準確(總是)5位數字? – Mat 2011-04-03 10:38:37

+0

我編輯的職位,很抱歉的混亂,ID始終是5位數字, 有時用戶會HEVE幾張照片,那麼這將是10052a.jpg和10052b.jpg – user648026 2011-04-03 14:19:15

回答

2

由於在文件名中的ID總是由5位數字,該算法可以是這樣的:

  1. 在老位置以一個文件。

  2. 摘自文件名作爲相應的用戶ID領先的5個字符。

  3. 如果有通過新的根路徑沒有相應的子文件夾,創建它。

  4. 將文件複製到新的位置。

  5. 相應的SQL腳本行添加到SQL腳本文件。

  6. 重複步驟1..5所有相關文件。

而且這裏是我在執行的嘗試:

SETLOCAL 

SET "oldroot=X:\originalpath" 
SET "newroot=Y:\newrootfolder" 
SET "sqlscript=Z:\path\to\script.sql" 

FOR %%F IN (%oldroot%\*.jpg) DO CALL :process "%%F" 

ENDLOCAL 
GOTO :EOF 

:process 
SET filename=%~nx1 
SET userid=%filename:~0,5% 

IF NOT EXIST "%newroot%\%userid%\" MKDIR "%newroot%\%userid%" 
COPY %1 "%newroot%\%userid%" 

>>%sqlscript% ECHO update users set user_img = '%userid%\%filename%' where user_id = %userid% 
+0

如果不是5位數? – kurumi 2011-04-03 15:07:34

+0

@kurumi:將其作爲問題發佈並等待答案。 :)正如OP所述,我提供的解決方案可以解決這個問題的需求。 – 2011-04-03 15:12:07

+0

優秀!我將SetLocal EnableDelayedExpansion添加到頂部,並且我更改了最後一行以追加到腳本[ECHO XXX >>%sqlscript%],它的工作非常棒!謝謝! – user648026 2011-04-03 18:53:15

1

如果你有一個選擇,這裏有一個Ruby for Windows腳本

require 'fileutils' 
root="C:\\root" 
o = File.open("sql.txt","w") 
Dir["*.jpg"].each do| jpg| 
    dirname = jpg.scan(/^(\d+)/)[0].first # get the nbumber 
    Dir.mkdir(dirname) if not Dir.exists?(dirname) #make directory 
    FileUtils.copy(jpg , root + "\\"+dirname) #copy/move 
    o.write("update users set user_img = #{dirname}/#{jpg} where user_id = #{dirname}\n"); #create sql 
end 
o.close 

我不知道爲什麼你正在使用的* nix目錄語法,當你在Windows,但相應地更改root變量,你認爲合適。

+0

謝謝了劇本看起來更復雜然後批處理腳本,我會嘗試Ruby並讓你知道。什麼是nix目錄? – user648026 2011-04-03 14:22:21

+0

您還沒有看到批量解決方案,那麼您如何知道它比批處理更復雜? ;) – kurumi 2011-04-03 14:23:43

+0

比你使用'.cmd'腳本可能做的任何事情都要短得多。 – Mat 2011-04-03 15:01:21