微剋多資訊

 找回密碼
 註冊

Sign in with google

Google帳號登入

搜索

該用戶從未簽到

升級   51.8%

跳轉到指定樓層
主題
發表於 2015-8-4 15:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 jmsdhn 於 2015-8-4 19:50 編輯

打擾了

若某一資料夾有不定量的檔案
譬如3個aaa.txt,bbb.txt,ccc.txt
想在這三個檔案前面加入遞增數字從1開始

我寫了如下的批次命令:
---------------------------------------------------------
set NUM=0
for /f %%i in ('dir/s/b R:\TEST\*.txt') do (
        set file=%%~i
        call :out
        )
        
:out
set/a NUM+=1
echo %NUM%---%file%

---------------------------------------------------------

其輸出結果卻與想要的有點出入
---------------------------------------------------------
1---R:\TEST\aaa.txt
2---R:\TEST\bbb.txt
3---R:\TEST\ccc.txt
4---R:\TEST\ccc.txt

---------------------------------------------------------


請問先進
為何會有第四個跑出來呢?
感謝指教喔^^
樓主熱門主題

該用戶從未簽到

升級   50.5%

2F
發表於 2015-8-4 17:49 | 只看該作者
  1. dir /b
複製代碼
最後會多列一條空行

  1. if exist file (
  2.     call :out
  3. )
複製代碼
在呼叫前加上判斷檔案是否存在就可以了

使用道具

該用戶從未簽到

升級   51.8%

3F
 樓主| 發表於 2015-8-4 18:53 | 只看該作者
好像結果一樣呢
  1. 1---R:\TEST\aaa.txt
  2. 2---R:\TEST\bbb.txt
  3. 3---R:\TEST\ccc.txt
  4. 4---R:\TEST\ccc.txt
複製代碼
不知道理解的對不對
我是這樣寫的
  1. set NUM=0
  2. for /f %%i in ('dir/s/b R:\TEST') do (
  3.         set file=%%~i
  4.         if exist %file% (
  5.     call :out
  6.         )
  7. )
  8.        
  9. :out
  10. set/a NUM+=1
  11. echo %NUM%---%file%
複製代碼
還請大大開釋

使用道具

該用戶從未簽到

升級   51.8%

4F
 樓主| 發表於 2015-8-4 19:06 | 只看該作者
本帖最後由 jmsdhn 於 2015-8-4 19:08 編輯

剛剛試著插入一些指令
  1. set NUM=0
  2. for /f %%i in ('dir/s/b R:\TEST') do (
  3.         set file=%%i
  4.         echo %file%
  5.         if not "%file%"=="" (
  6.     call :out
  7.         )
  8. )
  9.        
  10. :out
  11. set/a NUM+=1
  12. echo %NUM%---%file%
  13. pause
複製代碼
竟然發現這個詭異的訊息
  1. R:\TEST\ccc.txt
  2. 1---R:\TEST\aaa.txt
  3. 請按任意鍵繼續 . . .
  4. R:\TEST\ccc.txt
  5. 2---R:\TEST\bbb.txt
  6. 請按任意鍵繼續 . . .
  7. R:\TEST\ccc.txt
  8. 3---R:\TEST\ccc.txt
  9. 請按任意鍵繼續 . . .
  10. 4---R:\TEST\ccc.txt
  11. 請按任意鍵繼續 . . .
複製代碼
為何每次的迴圈%file%都是R:\TEST\ccc.txt
這會不會是if exist %file%一直YES的原因呢?
感謝開釋

使用道具

該用戶從未簽到

升級   51.8%

5F
 樓主| 發表於 2015-8-4 19:49 | 只看該作者
最後還是自己想辦法解了
  1. set NUM=-1
  2. for /f "delims= tokens=1" %%i in ('dir/s/b R:\TEST') do (
  3.         call :out
  4.         set file=%%i
  5. )
  6.        
  7. :out
  8. set/a NUM+=1
  9. if not %NUM%==0 echo %NUM%---%file%>>test.txt
複製代碼
我發現把這兩行對調
  1. call :out
  2. set file=%%i
複製代碼
情況大不同
NUM=0時%file%會是空行
但也不知道真正原因為何了(可能就是大大說的dir/b問題)
只知道NUM初始值必須是-1
則NUM=1才會批配第一檔名
結果就是
  1. 1---R:\TEST\aaa.txt
  2. 2---R:\TEST\bbb.txt
  3. 3---R:\TEST\ccc.txt
複製代碼
還是要感謝大大讓我知道執行dir/b之後
在命令游標的上一行是他產生的

點評

因為我的測試的檔案只放了一個所以沒測試到判斷錯誤,拍謝  發表於 2015-8-5 07:57

使用道具

您需要登入後才可以回帖 登入 | 註冊

本版積分規則

小黑屋|Archiver|微剋多資訊(MicroDuo)

GMT+8, 2024-11-21 20:27

Discuz! X

© 2009-2023 Microduo

快速回覆 返回頂部 返回列表