![](/img/trans.png)
[英]Why working directory changes to system32 when executing a batch file that's in a different directory and how to change it
[英]Why is xcopy command not working for copying a bitmap file into a subdirectory of Windows system32 directory?
我的批處理文件有問題。 我想使用xcopy
復制一些文件,但它無法正常工作。
@echo off
md %systemroot%\system32\hello
md %systemroot%\system32\wlppr
xcopy /y "%cd%\qwerty.bmp" "%systemroot%\system32\hello"
xcopy /y "%cd%\qwerty2.bmp" "%systemroot%\system32\wlppr"
文件夾成功創建,但當Windows嘗試復制文件時,此消息顯示在CMD中:
File not found - qwerty.bmp
0 File(s) copied
File not found - qwerty2.bmp
0 File(s) copied
是的,我嘗試使用管理員權限運行該文件。
我究竟做錯了什么?
通過雙擊批處理文件,執行Windows命令解釋程序cmd.exe
,使用隱式選項/C
自動關閉控制台窗口,並在成功執行批處理或因語法錯誤退出后終止命令進程。 此行為不適合調試批處理文件無法按預期方式工作。 更好地調試批處理文件是打開命令提示符窗口,導致運行cmd.exe
,使用隱式選項/K
來保持打開控制台窗口,讓命令進程在執行批處理文件之后繼續運行(不包含exit
/B
)查看批處理文件執行期間輸出的所有錯誤消息。
雙擊批處理文件通常會導致批處理文件目錄中的批處理文件執行。 因此,當前目錄是批處理文件的目錄。
但是,如果批處理文件存儲在Windows資源管理器中使用UNC路徑打開的網絡共享上,則Windows命令解釋程序通常會在從批處理文件執行第一個命令行之前輸出當前目錄設置為%SystemRoot%
的消息。 可以通過特殊的Windows注冊表值關閉此行為。
如果通過右鍵單擊並使用上下文菜單選項“以管理員身份運行”執行批處理文件,則以%SystemRoot%\\System32
作為當前目錄啟動Windows命令進程,從而導致以Windows系統目錄作為當前目錄執行批處理文件。
因此,建議將此批處理文件編寫為獨立於當前目錄。 一個好主意是將兩個位圖文件復制到與批處理文件相同的目錄中,並使用%~dp0
引用批處理文件的目錄, %~dp0
依賴於批處理文件執行時的當前目錄。 %~dp0
引用參數0的驅動器和路徑,它是批處理文件的名稱。 call /?
在命令提示符窗口中,有關引用批處理文件參數的詳細信息。
如果目標字符串以反斜杠結尾,則XCOPY命令會自動創建復制1個或多個文件的整個文件夾樹,使xcopy
清楚目標是文件夾名稱而不是文件名。
所以使用的命令是:
%SystemRoot%\System32\xcopy.exe "%~dp0qwerty.bmp" "%SystemRoot%\System32\hello\" /Q /Y >nul
%SystemRoot%\System32\xcopy.exe "%~dp0qwerty2.bmp" "%SystemRoot%\System32\wlppr\" /Q /Y >nul
使用%~dp0
引用的批處理文件的文件夾路徑始終以反斜杠結尾。 因此,兩個源文件名字符串中都沒有指定其他反斜杠。
在命令提示符窗口xcopy /?
有關此命令的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.