アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

会社でファイル名に商品コードを使っており、10桁のものと13桁のもの(ともに半角英数字)が混在しています。
あるフォルダから、ファイル名が13桁のもののみ別のフォルダに移動したいのですが、手動でやるには数が多すぎ、フリーソフトは使用禁止のため、コマンドプロンプトでできたら…と思っております。

しかし、?では0文字も含んでしまうため、どのように指定したらよいかわからず困っております。
商品コード以外で名前をつけているものもあるため、10桁のものを一旦移動する、ということもできません。

ファイル名の文字数を指定する方法があれば、教えていただければ幸いです。

よろしくお願いいたします。

質問者からの補足コメント

  • お礼を途中で投稿してしまったのでこちらで失礼します。
    結局、テキストにファイル一覧を出力してfindstrで13文字のものを拾ってmove、という方法でできました。findstrでの正規表現という方法、よく知らなかったのでとても助かりました!

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/09/15 20:33

A 回答 (5件)

自分なら・・・



名前順にソートしてテキストに出力してそれを編集して必要なファイルだけ残し、
dir /b /on > s-file.txt
 
テキストファイルからforコマンドの/fオプションを使ってファイル名を拾って、パスを設定してmoveコマンドで移動させるかも。
テキストをパス付きで編集しておいても良いかもしれないが、面倒なのでやらない。
rem この下2つの環境変数には実際に使うパスを指定すること。
set Path1=C:\
set Path2=D:\

for /f "delims=" %%a in (s-file.txt) do (
set fromPath=%Path1%\%%a
set toPath=%Path2%\%%a
move %fromPath% %toPath%
)
 
これを10文字と13文字のファイルでそれぞれ行う。

ああ、これ未検証だからエラーが出るかもしれない。
    • good
    • 0
この回答へのお礼

ありがとうございます、一旦テキストに出力するというやり方、目から鱗でした!
結局、出力したテキストからfindstrで13文字を拾ってmove、という方法でできました。
丁寧なご回答に感謝です!

お礼日時:2015/09/15 20:30

#3 のWscript を書いた者ですが、ひとつ、書き忘れていたことがあります。



>商品コードを使っており、10桁のものと13桁のもの(ともに半角英数字)
私の書いたものは、あくまでも、拡張子を除いたもの
If Len(BaseName) = 10

[abcdefghij].[txt] としたら、最初の[abcdefghij]までの10文字です。
一応、念の為にしるしておきます。
    • good
    • 0
この回答へのお礼

再びのご回答ありがとうございます。Wscriptについて、詳しく教えていただき感謝です!分かりやすくて便利そうですね。Wscriptについても、また勉強してみたいと思います!

お礼日時:2015/09/15 20:36

こんにちは。



Wscript って、ご存知でしょうか。
Windows の中に入っている VBライクなプログラムで、バッチよりも簡単で表現力が豊かなプログラミング言語です。


テキストエディタで、以下のコードを貼り付けて、名前は何でもよいのですが、拡張子を、VBS としてあげます。
MyPath と Destin に、必要なフォルダを書いてください。

それを、ファイルを移動する元のフォルダに入れてあげます。

例えば、 flen_move.vbs

#2さんの findstr は、そういえば、そういうのはありましたね。今、思い出しました。

以下は、全角空白だけはいれないでください。

'---------切り取り線----------
Dim FName, MyPath, Destin, MyName
Dim objFS, objFolder, objFolderItems, objItem, objShell
Dim i, cnt
MyName = WScript.ScriptName
MyName = Left(MyName, Len(MyName)-4)
MyPath = "D:\Test1\"
Destin = "D:\Test2\"
Set objFS = CreateObject("Scripting.FilesystemObject")
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(MyPath)
Set objFolderItems = objFolder.Items()
For i = 0 To objFolderItems.Count - 1
Set objItem = objFolderItems.Item(i)
FName =objItem.Name
BaseName = objFS.GetBaseName(FName)
If Len(BaseName) = 10 And BaseName <> MyName Then '桁数10
objFS.Movefile FName, Destin
cnt = cnt + 1
End If
Next

MsgBox CLng(cnt) & "個のファイル移動終了"
Set objFolderItems = Nothing
Set objFolder = Nothing
Set objShell =Nothing
Set objFS= Nothing

'--------------------
    • good
    • 0
この回答へのお礼

ありがとうございます!
Wscript、初めて知りました。今回はfindstrを使ってバッチを作りましたが、これはとても便利そうですね。わざわざテンプレートまで書いてくださり、ご丁寧に本当にありがとうございました!

お礼日時:2015/09/15 20:24

dir /b | findstr /r "^.............$"

この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます!お陰さまで思っていた通りのことができました!

お礼日時:2015/09/15 20:21

「コマンドプロンプト」が Windows のものを意味するのだとしたら, 一例としては dir と findstr と for

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。失礼いたしました、Windows(OSは7)です。
半角英数字で13文字きっかりのファイル名を指定する方法があれば教えていただきたく、よろしくお願いいたします。
無知な初心者の私の知識では?????????????.*くらいしか思い浮かばないのですが、それでは10文字も含んでしまうので…

お礼日時:2015/09/15 12:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています