各位前輩好,因為最近在整理電腦一些資料
由於資料量稍微龐大些,想說利用bat批次檔來整理比較快
其實小弟我只知道批次檔有這樣功能,但不知道怎麼撰寫下
我就拿去餵了Bing AI
但總是會出現問題
例如我的描述為
幫我做BAT程式
1.掃描資料夾下的檔案名稱
2.擷取檔案名稱的第5和第6字元
3.掃描資料夾下的子資料夾名稱
4.擷取子資料夾名稱的第1和第2字元
5.比較檔案名稱的第5和第6字元是否和子資料夾名稱的第1和第2字元相同
6.相同的時候顯示成功,否則顯示失敗
7.相同的時候匹配成功的檔案移動到匹配成功的資料夾裡
回答出來是
@echo off
setlocal enabledelayedexpansion
for %%a in (*) do (
set filename=%%a
set filechars=!filename:~4,2!
for /d %%b in (*) do (
set foldername=%%b
set folderchars=!foldername:~0,2!
if !filechars!==!folderchars! (
echo Success: File !filename! matches folder !foldername!
move !filename! !foldername!
) else (
echo Failure: File !filename! does not match folder !foldername!
)
)
)
pause
就以執行結果來講
他是有執行做匹配的動作(因為會看到Success和Failure的顯示)
但是最後要移動檔案的部分卻沒有執行
顯示「命令語法不正確」
不知道這批次檔該怎麼改進比較好呢?
還請前輩不吝指教,謝謝!
這邊由於有前輩的回覆,我這邊改寫一下解答
@echo off
setlocal enabledelayedexpansion
for %%a in (*) do (
set filename=%%a
set filechars=!filename:~4,2!
for /d %%b in (*) do (
set foldername=%%b
set folderchars=!foldername:~0,2!
if !filechars!==!folderchars! (
echo Success: File !filename! matches folder !foldername!
rem 由於檔名和資料夾名屬於長檔名、特殊字元、空白等,需用"字串
rem 可參考https://ithelp.ithome.com.tw/articles/10055209
move "!filename!" "!foldername!"
) else (
echo Failure: File !filename! does not match folder !foldername!
)
)
)
pause
如果只有 move !filename! !foldername!
出問題,我猜是 !filename!
or !foldername!
有空白字元或特殊字元。
可以改成 move "!filename!" "!foldername!"
(用"
含括字串) 試試。
非常感謝,的確這個部分加入了"的話就成功移動了
我似乎搜尋到『長檔名或是特殊字元,無法辨識』,前後加上雙引號即可這說法(的確檔名長也是事實)
https://ithelp.ithome.com.tw/articles/10055209
@re.Zero
好的,這邊我修改一下