2016-04-08 5 views
0

ファイルがあり、以前に作成されていないアルファベット順のフォルダ内に移動したい。バッチを使用すると、フォルダを生成する必要があります。ファイルは、ファイルの最初の文字バッチファイルをUnicodeや '奇妙な'文字を含むアルファベット順に移動させる

以下、これらのフォルダ内に移動しなければならない論文私はこのような私のディレクトリ内の多言語ファイルのリストを持っている:

中文 
alfa 
35h 
Ĕuid 
لعربية 
សេវិនខ្មែរ 

私は最初のフォルダの文字を使用して、アルファベットのフォルダにファイルを移動するには、このコマンドを実行してください注文のため

@echo off 
setlocal enabledelayedexpansion 

for /d %%i in (*) do (
    set first=%%i 
    set first=!first:~0,1! 
    md !first! 2>nul 
    if not "!first!" == "%%i" move "%%i" "!first!\%%i" 
) 

何も起こりません。
この部分

for /d %%i in (*) do (

あなたは現在働くfor /dを使用している

+0

を、あなたは、「ファイルリスト」を持っていると言うが、あなたはのために/ D ' '使用していますファイルではなくディレクトリでのみ動作します。これらは実際にファイルまたはディレクトリですか? – Elezar

+0

また、あなたのリストにある4番目の名前は何ですか?疑問符はWindowsでは有効なファイル名文字ではありません。名前に疑問符の付いたファイルやフォルダを実際にどうやって取得したのですか、それともコピー/貼り付けやSOの表示エラーですか? – Elezar

+0

@エレザル:それは疑問ではないと確信しています。それは?現在のフォントまたはコードページを使用してUnicode文字を表現できない場合に表示されます。あなたが言うように、それはファイル/フォルダ名に許容される文字ではないので、疑問符(ASCII 0x3F /小数点63)にすることはできません。 –

答えて

0

を(私は以前にフォルダを作成したくない)フォルダを作成し、ファイルをフォルダを移動していないが、私は、生成されたフォルダ内のファイルを移動したいですディレクトリではなく、ファイルである。あなたはファイルを持っているので、あなたはforループが必要です。 /dだけを削除すると、そのようになります。ただし、バッチファイル自体も移動することになります。あなたがそれを望まないなら、それを除外するために論理を入れる必要があります。このようなもの:

@echo off 
setlocal enabledelayedexpansion 

for %%i in (*) do (
    set first=%%i 
    if not "!first!" == "%0" (
    set first=!first:~0,1! 
    md !first! 2>nul 
    if not "!first!" == "%%i" move "%%i" "!first!\%%i" 
) 
) 

EDIT FOR!サポート

ファイル名に感嘆符が含まれていると、機能しません。遅延拡張を有効にすると、可変区切り文字の一部として認識されるためです。それを回避する方法は、変数にファイル名を割り当てることであるあなたが遅れて拡張可能前:

@echo off 
setlocal 

for %%i in (*) do (
    set name=%%i 
    setlocal enabledelayedexpansion 
    if not "!name!" == "%0" (
    set first=!name:~0,1! 
    md !first! 2>nul 
    if not "!first!" == "!name!" move "!name!" "!first!\!name!" 
) 
) 
+0

コマンドはほぼ完璧に動作しますが、 '!'バッチのような文字は動作しません。どうして? –

+0

私はどのように作業するかに関する情報で私の答えを編集しました!遅延拡張が有効になっている場合はファイル名に – Elezar

+0

「!」サポートに感謝します! –

関連する問題