2012-06-15 14 views
0

我正在嘗試使用通配符將某些文件組移至由該組的文件名創建的文件夾。這些文件的名稱存儲在「events.txt」中。我的批處理文件正在運行最後一行。顯示我的語法不正確。如何在批量編程中使用通配符?

echo off 
for /F "tokens=*" %%A in (events.txt) do call :makemove %%A 
pause 
exit 

:makemove 
set f=%1 
set file=%f:~0,-4% 
md X%file% 
set dest=C:\Users\sony\Desktop\X%file% 
move /y "C:\Users\sony\Desktop\*%file%*.*" "%dest%" 
+0

有文件變量賦值表達式後的空間 - 它只是一個錯字後?如果它也存在於腳本中,則會導致錯誤。 – Helbreder

回答

1

好像有空格字符後

set file=%f:~0,-4% 

線。

這將導致你的腳本的最後一行計算爲

move /y "C:\Users\sony\Desktop\*foobar *.*" "C:\Users\sony\Desktop\Xfoobar " 

和攪亂路徑。

+0

請注意move命令中的%dest%變量之後的反斜槓。沒有它,%dest%將被解釋爲文件名,而不是目錄名。 – Helbreder

+0

感謝您的回答!但它仍然沒有解決我的問題。 – yavvee

+0

感謝Helbreder的回答!但它仍然沒有解決我的問題。首先,移動命令適用於多個文件,當我在另一個文件夾中使用它時。我的意思是這個代碼正在工作,但我必須單獨輸入文件名(我試圖避免)' set/p file =寫入文件的名稱: md X%file% set dest = C: \ Users \ sony \ Desktop \ Intern @ ONGC \ DATA \ *%file%*。*「」%dest%「\ s \ Desktop \ Intern @ ONGC \ DATA \ X%file% move/ 暫停 exit'。 – yavvee

1

像Helbreder一樣指出,set file=%f:~0,-4%之後有一個空格。
要避免此類問題,您可以使用SET的擴展語法。

set "file=%f:~0,-4%"

周圍的報價將確保只有所有的字符,直到最後一個引號是字符串的一部分。
引號本身不是字符串的一部分。

因此,即使這會工作

set "file=%f:~0,-4%" the spaces and this text will be removed 

另一個積極效果從報價是,他們將避免在文件名中的特殊字符,像Cat&Dog問題。

所以,你的代碼看起來應該像

@echo off 
for /F "tokens=*" %%A in (events.txt) do call :makemove %%A 
pause 
exit 

:makemove 
set "f=%~1" 
set "file=%f:~0,-4%" 
md "X%file%" 
set "dest=C:\Users\sony\Desktop\X%file%" 
move /y "C:\Users\sony\Desktop\*%file%*.*" "%dest%" 
相關問題