嗯,如要求通过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