【cmd】IF ELSE 複製(copy)檔案問題
cmd中複製檔案COPY
命令一般都不會有問題,但是如果把COPY
放在IF ELSE
中可能導致批處理檔案無法執行。
測試場景
資料夾結構如下:
test
|—folder1
|—|—a(b).txt
|—folder2
選擇是否從folder1資料夾複製a(b).txt檔案到folder2資料夾。
測試1
不進行選擇互動,直接複製,指令碼如下:
@echo off & setlocal EnableDelayedExpansion
set currentDir=!cd!
DEL /Q !currentDir!\folder2\*.*
copy !currentDir!\folder1\a(b).txt !currentDir!\folder2
儲存為test.bat檔案後執行結果:
已複製 1 個檔案。
請按任意鍵繼續. . .
copy複製語句似乎沒有問題。
測試2
修改以上指令碼,新增選擇互動:
@echo off & setlocal EnableDelayedExpansion
set /p yesno=是否複製(0:否,1:是):
set currentDir=!cd!
DEL /Q !currentDir!\folder2\*.*
if !yesno! equ 1 (
copy !currentDir!\folder1\a(b).txt !currentDir!\folder2
)else (
echo 沒複製
)
pause
儲存為test.bat檔案後執行,發現一閃而過,看不到什麼報錯。
解決
經過多次測試,發現將copy中的路徑用雙引號(“”)包裹起來就可以了。
@echo off & setlocal EnableDelayedExpansion
set /p yesno=是否複製(0:否,1:是):
set currentDir=!cd!
DEL /Q !currentDir!\folder2\*.*
if !yesno! equ 1 (
copy "!currentDir!\folder1\a(b).txt" !currentDir!\folder2
)else (
echo 沒複製
)
pause
由此可見,應該是路徑中某些符號沒有轉義導致的,目測是檔名中的()
,修改指令碼,用^
將()
轉義:
@echo off & setlocal EnableDelayedExpansion
set /p yesno=是否複製(0:否,1:是):
set currentDir=!cd!
DEL /Q !currentDir!\folder2\*.*
if !yesno! equ 1 (
copy !currentDir!\folder1\a^(b^).txt !currentDir!\folder2
)else (
echo 沒複製
)
pause
執行結果:
是否複製(0:否,1:是): 1
已複製 1 個檔案。
請按任意鍵繼續. . .
總結
雖然測試1中直接執行復制沒問題,但是,將同樣的語句放入IF ELSE中居然無法執行,還很難定位問題在哪裡,所以解決方法是最好把路徑放在雙引號(“”)裡面,就不用擔心這個問題了,如果不這樣就在IF ELSE中的路徑把特殊字元轉義。附上CMD中特殊字元轉義說明。
Character to be escaped | Escape Sequence | Remark |
---|---|---|
% | %% | May not always be required in doublequoted strings, just try |
^ | ^^ | May not always be required in doublequoted strings, but it won’t hurt |
& | ^& | May not always be required in doublequoted strings, but it won’t hurt |
< | ^< | May not always be required in doublequoted strings, but it won’t hurt |
> | ^> | May not always be required in doublequoted strings, but it won’t hurt |
‘ | ^’ | Required only in the FOR /F “subject” (i.e. between the parenthesis), unless backqis used |
` | ^` | Required only in the FOR /F “subject” (i.e. between the parenthesis), if backq is used |
, | ^, | Required only in the FOR /F “subject” (i.e. between the parenthesis), even in doublequoted strings |
; | ^; | Required only in the FOR /F “subject” (i.e. between the parenthesis), even in doublequoted strings |
= | ^= | Required only in the FOR /F “subject” (i.e. between the parenthesis), even in doublequoted strings |
( | ^( | Required only in the FOR /F “subject” (i.e. between the parenthesis), even in doublequoted strings |
) | ^) | Required only in the FOR /F “subject” (i.e. between the parenthesis), even in doublequoted strings |
! | ^^! | Required only when delayed variable expansion is active |
“ | “” | Required only inside the search pattern of FIND |
\ | \\ | Required only inside the regex pattern of FINDSTR |
[ | \[ | Required only inside the regex pattern of FINDSTR |
] | \] | Required only inside the regex pattern of FINDSTR |
\ | \\ | Required only inside the regex pattern of FINDSTR |
. | \. | Required only inside the regex pattern of FINDSTR |
* | \* | Required only inside the regex pattern of FINDSTR |
? | \? | Required only inside the regex pattern of FINDSTR |
參考:http://www.robvanderwoude.com/escapechars.php
將表格快速轉換為HTML,Markdown格式:http://www.tablesgenerator.com/
相關文章
- win10 cmd複製檔案命令怎麼執行_win10 cmd命令如何複製檔案Win10
- 資料庫檔案複製問題和解決辦法資料庫
- 解決關於Mac不能複製複製檔案到隨身碟的問題Mac
- 複製檔案githubGithub
- 面試題分解—「淺複製/深複製、定義屬性使用copy還是strong ?」面試題
- ubuntu下檔案複製Ubuntu
- Java IO 建立檔案解決檔名重複問題Java
- Java-IO:複製檔案Java
- Go語言複製檔案Go
- mysql檔案複製遷移MySql
- netcdf檔案複製並修改
- React元件化複製 react-clipboardjs-copyReact元件化JS
- Java 中的寫時複製 (Copy on Write, COW)Java
- git複製一份檔案Git
- [java IO流]之檔案複製Java
- python中的複製copy模組怎麼使用?Python
- 遠端登入和複製檔案
- Linux 中複製和移動檔案Linux
- 檔案複製(Go語言實現)Go
- 如何同時複製、分類檔案
- 如何批量複製多個檔案到多個目錄中(批量複製檔案,多對多檔案高效操作的方法)
- win10 dos命令怎麼複製檔案_win10 dos命令複製檔案操作方法Win10
- win10系統中複製iso檔案提示ISO檔案過大無法複製如何解決Win10
- linux複製檔案到另一個資料夾怎麼操作 linux複製檔案的命令介紹Linux
- 陣列(引用型別)複製問題陣列型別
- 解決移動端複製問題
- JS中的陣列複製問題JS陣列
- 第九天- 檔案操作 r w a 檔案複製/修改
- Java IO 流之拷貝(複製)檔案Java
- 用python生成oracle goldengate複製配置檔案PythonOracleGo
- 帶進度條複製檔案代替copyfile
- python多程式實現檔案海量複製Python
- MySQL之 從複製延遲問題排查MySql
- 解決csdn登陸複製的問題
- JavaScript 深複製的迴圈引用問題JavaScript
- cmd中如何執行Python檔案Python
- Python shutil用法 複製檔案與目錄操作Python
- Java I/O流 複製檔案速度對比Java
- java 位元組流檔案複製方法總結Java