1

こんにちは、画像を操作するための Windows バッチ スクリプト ファイルの助けを借りて喜んでいます。古いソフトウェアから移行しています。以前はファイルをフォルダーに保存していましたが、各ファイルには独自のユーザー ID (例: 10050.jpg) がありました。これらのイメージの 1000 のように、イメージをイメージ名で新しいフォルダーに配布し、新しいソフトウェアを更新するための SQL ファイルを作成したいと思います。たとえば、次のようになります。

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

に行きます:

/ルート/10050/10050.jpg
/ルート/10051/10051.jpg
/root/10052/10052a.jpg
/ルート/10052/10052b.jpg

そして作成されたSQLファイル:

ユーザーを更新する set user_img = 10050/10050.jpg where user_id = 10050;
ユーザーを更新する set user_img = 10051/10051.jpg where user_id = 10051;
ユーザーを更新する設定 user_img_a = 10052/10052a.jpg where user_id = 10052;
ユーザーを更新する設定 user_img_b = 10052/10052b.jpg where user_id = 10052;

この情報を抽出するためのバッチ ファイルを作成するのを手伝ってくれる人はいますか? 私はこれでランク初心者です。ありがとうございました!

4

2 に答える 2

2

ファイル名の ID が常に 5 桁で構成されている場合、アルゴリズムは次のようになります。

  1. 古い場所にあるファイルを取得します。

  2. ファイル名から先頭の 5 文字をそれぞれのユーザーの ID として抽出します。

  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%
于 2011-04-03T15:01:56.563 に答える
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

Windows を使用しているときに *nix ディレクトリ構文を使用している理由はわかりませんが、必要にroot応じて変数を変更してください。

于 2011-04-03T10:57:25.103 に答える