2017-03-16 10 views
0

これは私の最初の質問ですので、礼儀を破ると私を許してください!バッチファイルを使用して名前にスペースを含むファイルを移動する

基本的に、私は何をしたい、このです:

移動ファイルフォルダAからフォルダBへ。 フォルダcからフォルダdにファイルを移動します。

同じスクリプト内でこれが連続して起こるようにしたいと思います。以下は私の瞬間のコードです。

:loop 

echo Ooops 

SET src_folder=C:\Users\user\Desktop\a 
SET tar_folder=C:\Users\user\Desktop\b 
SET src_folder1=C:\Users\user\Desktop\c 
SET tar_folder1=C:\Users\user\Desktop\d 

for /f %%a IN ('dir "%src_folder%" /b') do move %src_folder%\%%a %tar_folder% 
for /f %%a IN ('dir "%src_folder1%" /b') do move %src_folder1%\%%a %tar_folder1% 

timeout 3 

goto loop 

このコードでは、しかし、私は、そのフォルダ内の何かが次のいずれかに移動することにしたい、スペースを入れずにファイルを移動します。

このトピックに関するお役立てください。

ありがとう、 Dan。

答えて

0

フォルダ内のすべてのファイルを移動する場合は、*。*を使用しないでください。

move %src_folder%\*.* %tar_folder% 

ファイルをスペースで移動するには、ファイル名を二重引用符で囲む必要があります。

for /f %%a IN ('dir "%src_folder%" /b') do move "%src_folder%\%%a" %tar_folder% 
+1

がありますどちらか 'delims ='や 'トークン= *'スペースを含むファイル/フォルダ名を扱うときに/ Fオプションのために不足しています。 – LotPings

1
for /f "DELIMS=" %%a IN ('dir "%src_folder%" /b') do move "%src_folder%\%%a" %tar_folder% 

delims=は(スペースを含む)は、デフォルトの区切り文字を無効にし、move文の引用符は、単一のエンティティとして見なされるべきでは引用符で囲まれた文字列を引き起こします。

宛先は、必要に応じて引用することもできます。

はwhate、スペースで区切られたトークンにドキュメント

0
  1. for /F分割ラインのプロンプトから

    for /? 
    

    を見ると、デフォルトで最初のトークンを返しますので、あなたはtokens=*かを指定する必要がありますdelims=。さらに、for /Fはデフォルトで;で始まる行を無視するので、別の文字をeol=オプションで指定してください。ファイルまたはディレクトリのパスについては、eol=|と書いてあります。|という文字はパス内では使用できません。

  2. ファイルとディレクトリのパスを引用符で囲みます。
  3. setの構文set "VAR=Value"を使用します(引用符は値の一部にはなりませんが、一部の特殊文字や不要な末尾の空白の問題を回避します)。

    set "src_folder=C:\Users\user\Desktop\a" 
    set "tar_folder=C:\Users\user\Desktop\b" 
    
    for /F "delims= eol=|" %%a in ('dir /B "%src_folder%"') do (
        move "%src_folder%\%%a" "%tar_folder%" 
    ) 
    
関連する問題