2016-05-08 9 views
0

で同一でいずれかの単語、私はこのファイルを移動したい(拡張子はirrilevantある)フォルダ移動ファイル名

cane 

cane pazzo.txt 
cane.torrent 
incredibile cane s03.xx 

私はこのコード

@echo off 
setlocal enabledelayedexpansion 
pushd %1 
for /F "USEBACKQ tokens=*" %%a in (`dir /b /a:-d`) do (
    set "_file=%%a" 
    for /D %%b in (*) do (
     if NOT "x!_file:%%b=!" == "x!_file!" (
      move %%a %%b 
     ) 
    ) 
) 
popd 
を持っている場合

でも、フォルダと同じ名前のファイルのみを移動できます

cane.torrent --> cane 

代わりに、これらのファイル

cane pazzo.txt 
incredibile cane s03.xx 

はファイル名内の一つの単語の多くを持っているので、内部に移動されません。なぜ??

.batスクリプトを使用するすべてのソリューションですか?

+0

PowerShellでは、 'foreach($ dir in gci -Directory){gci |ここで、名前-match $ dir.Name | mv -Destination $ dir} ' – TessellatingHeckler

+0

フォルダ' cane'はすでに存在し、その名前はファイル名で検索する単語ですか? – aschipfl

+0

@aschipfl はい、正しくありますが、私はどのようにpowershellを使用する必要があるのか​​分かりません。私はコマンドをコピーしますが、それは私に無効を教えてくれます。 –

答えて

2

あなたのロジックは正しいです。唯一のポイントは、スペースを含む名前が正しく処理されてmoveコマンドは、引用符でファイルを囲むべきであるということです。

move "%%a" "%%b" 

ことが必要ではないので、私はまた、比較の「X」を排除するであろう:

if NOT "!_file:%%b=!" == "!_file!" (
+0

はい、今解決しました、引用符だけです。 –