嗯,如要求通過just me的也許是最好的解決辦法根據Andy Morris不完整的意見是以下命令的任務:
xcopy "J:\My Name\FILES IN TRANSIT\JOHN20101126\Missing file\Shapes.atc" "C:\Documents and Settings\His name\Application Data\Autodesk\AutoCAD 2010\R18.0\enu\Support\" /Q /R /S /Y
該作品對於這個簡單的文件複製任務,因爲
- 僅指定目標目錄,而不是目標文件和
- 結束目的地目錄用反斜槓是另有XCOPY非常重要甚至會與
/I
提示有關複製文件或目錄只是一個單一的文件。
不相關的問題,其他參數是:
/Q
......安靜
/Y
...上覆蓋現有文件
/R
是(OS語言無關)..覆蓋也是隻讀,隱藏和系統文件
/S
...從指定的目錄和所有子目錄。
好了,我不知道是否真的需要在這裏/S
,因爲它是不明的,如果只是J:\My Name\FILES IN TRANSIT\JOHN20101126\Missing file\Shapes.atc
應該被複制或在J:\My Name\FILES IN TRANSIT\JOHN20101126\Missing file
目錄樹中的任何地方發現的所有Shapes.atc
。
可以通過打開命令提示符窗口並從該窗口內運行xcopy /?
來獲取參數解釋,以獲得輸出XCOPY的幫助。
但沒有提供的解決方案的工作了上一個文件應該被複制到同一個目錄中的源文件中的文件複製任務,但由於當前日期和時間的不同的文件名中插入文件文件擴展名前的名稱。
源文件可以隱藏或設置系統屬性,但不包括使用COPY命令。
用於創建加時間戳文件的批處理文件也應該在Windows XP上工作,該文件不包括ROBOCOPY,因爲默認情況下在Windows XP上不可用。
批處理文件應該可以處理任何文件,包括非典型文件,如.gitconfig
或.htaccess
,它們是沒有文件擴展名的文件,以點開頭,將它們隱藏在* nix系統上。 Windows命令處理器將這些文件解釋爲沒有文件名且僅具有文件擴展名的文件,因爲規則是上一點之後的所有內容都是文件的擴展名,而最後一點之前的所有內容都是文件名。
欲瞭解完整的任務描述和最終完整評論的解決方案,請參閱UltraEdit論壇中的文章Create a backup copy of files。
Patrick's,Tirtha R's,Interociter Operator's和CharlesB's解決方案不起作用,因爲使用/Y
不避文件或目錄的提示,如果目標文件不存在。
Andy Morris'和grenix's解決方案不能用於單個文件複製任務,因爲目標必須是目標文件的名稱而不是目標目錄的名稱。目標目錄與源目錄相同,但目標文件的名稱與源文件的名稱不同。
DosMan's和Govert's解決方案不適用於以點開始且沒有文件擴展名的文件。
例如命令
xcopy C:\Temp\.gitconfig C:\Temp\.gitconfig_2016-03-07_15-30-00* /C /H /K /Q /R /V /Y
導致下面的錯誤消息上執行:
英文:無法擴大第二文件名,以便第一匹配。
德語:Zweiter Dateiname konnte nicht so erweitert werden,dass er zum ersten passt。
最後Denis Ivin's解決方案有一個限制,即操作系統語言相關字符用於自動應答文件或目錄提示必須知道。
所以我想到的方法來自動獲取F
爲文件在英語Windows或D
爲Datei上德語Windows或?
爲... ...上的Windows。
確實可以確定自動回答提示的語言相關字符。
黑客攻擊被用來從提示文本依賴於語言的信件並沒有真正複製任何文件。
命令XCOPY用於開始將批處理文件自身複製到臨時文件的文件夾,文件擴展名爲目標文件的TMP。這導致提示符XCOPY如果沒有已經在臨時文件夾這個名字,這是非常不可能的文件。
NULL被用作輸入處理程序爲XCOPY導致提示後突破複製處理裝置的處理程序是通過XCOPY兩次輸出。
該輸出在FOR循環中處理,該循環從第一行開始以圓括號開始。這是第二個字符定義用於指定目標是文件的字母的行。
下面是使用XCOPY的代碼以確定該文件或目錄提示的自動應答,以創建在同一目錄中的單個文件的時間標記的副本作爲源文件,即使所需的字母的批處理文件源文件是隱藏文件或系統文件,即使源文件以點開頭並且沒有文件擴展名。
@echo off
rem Batch file must be started or called with name of a single file.
if "%~1" == "" exit /B
for /F "delims=*?" %%I in ("#%~1#") do if not "%%I" == "#%~1#" exit /B
if not exist "%~1" exit /B
if exist "%~1\" exit /B
setlocal EnableDelayedExpansion
rem Determine the character needed for answering prompt of
rem XCOPY for destination being a file and not a directory.
del /F "%TEMP%\%~n0.tmp" 2>nul
for /F %%I in ('%SystemRoot%\System32\xcopy.exe "%~f0" "%TEMP%\%~n0.tmp" ^<nul') do (
set "PromptAnswer=%%I"
if "!PromptAnswer:~0,1!" == "(" (
set "PromptAnswer=!PromptAnswer:~1,1!"
goto CopyFile
)
)
echo ERROR: Failed to determine letter for answering prompt of XCOPY.
exit /B
:CopyFile
rem This is a workaround for files starting with a point and having no
rem file extension like many hidden files on *nix copied to Windows.
if "%~n1" == "" (
set "FileNameWithPath=%~dpx1"
set "FileExtension="
) else (
set "FileNameWithPath=%~dpn1"
set "FileExtension=%~x1"
)
rem Get local date and time in region and language independent format YYYYMMDDHHmmss
rem and reformat the local date and time to format YYYY-MM-DD_HH-mm-ss.
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS get LocalDateTime /format:value') do set "LocalDateTime=%%I"
set "LocalDateTime=%LocalDateTime:~0,4%-%LocalDateTime:~4,2%-%LocalDateTime:~6,2%_%LocalDateTime:~8,2%-%LocalDateTime:~10,2%-%LocalDateTime:~12,2%"
rem Do the copy with showing what is copied and with printing success or
rem an error message if copying fails for example on sharing violation.
echo Copy "%~f1" to "%FileNameWithPath%_%LocalDateTime%%FileExtension%"
for /F %%I in ('echo %PromptAnswer% ^| %SystemRoot%\System32\xcopy.exe "%~f1" "%FileNameWithPath%_%LocalDateTime%%FileExtension%" /C /H /K /Q /R /V /Y') do set "FilesCopied=%%I"
if "%FilesCopied%" == "1" (
echo Success
) else (
echo ERROR: Copying failed, see error message above.
)
此批處理代碼在德語Windows XP SP3 x86和英語Windows 7 SP1 x64上進行了測試。
見在UltraEdit論壇帖子Create a backup copy of files一個類似的,完全註釋的批處理文件,說明該批次代碼的所有部分。
爲了解所使用的命令及其工作方式,請打開命令提示符窗口,在其中執行以下命令,並仔細閱讀爲每個命令顯示的所有幫助頁面。
del /?
echo /?
exit /?
for /?
goto /?
if /?
rem /?
set /?
setlocal /?
wmic OS get /?
xcopy /?
而且微軟的文章關於Using command redirection operators應該讀了。
使用管道命令 – 2016-03-12 10:52:51