2012-07-03 22 views
0

我是新来的CMD下有这个麻烦:如何使用FOR/F命令时,该文件有一个空间

md "C:\kysumicomp" 
for /f "usebackq" %%a in (`CALL DIR /b /s "C:\Program Files" ^| FIND "javac.exe"`) do 
    copy "%%a" "C:\kysumicomp" 
pause 

我所试图实现的是一个批处理文件,将发现javac.exe文件然后将其复制到C:\ kysumicomp但我不希望它是一个绝对路径,所以如果我的Java更新批处理仍然工作。

+2

为什么这个问题标签java吗? –

+1

@TedHopp我怀疑,因为有一个地方名为'javac.exe'在脚本文件! :P –

回答

1

嗯......你真正的问题(尽管问题的标题)似乎是:

What I am trying to achieve is a batch file that that will find the javac.exe file then copy it to C:\kysumicomp...

我觉得你过于复杂的事情。

试试这个(指FOR /?的详细信息,在/R选项):

FOR /R "%ProgramFiles%" %%a IN (.) DO (
    IF EXIST "%%~a\javac.exe" COPY /Y "%%~a" C:\kysumicomp\ 
) 

注意,这将javac.exe所有 occurances复制到目录中,一个覆盖其他(有一个问题,你的原来的解决方案也)。如果你想先打后停下来,你需要提前退出循环:

FOR /R "%ProgramFiles%" %%a IN (.) DO (
    IF EXIST "%%~a\javac.exe" (
     COPY "%%~a" C:\kysumicomp\ 
     GOTO END 
    ) 
) 
:END 

最后,一个简单的解决方案可能会被复制的javac.exe是在你的PATH,只要它是。

FOR %%a IN (javac.exe) DO (
    IF EXISTS "%%~$PATH:a" (
     COPY "%%~$PATH:a" C:\kysumicomp\ 
    ) 
) 

然后,因为你的问题标题已不匹配,你想达到什么样的,我不知道如果你真的需要完全做完全不同的东西。你为什么首先将javac.exe复制到你的目录?

+0

我stilll似乎得到了同样的错误:C:\>复制 “C:\ PROGRAM” “C:\ kysumicomp” 该系统找不到指定的文件。 – Kysumi

+0

你试过了什么版本? –

0

这应该做些什么,你需要在

for /f
@echo off 
md "C:\kysumicomp" 
for /r "C:\Program Files" %%a in (*.*) do (
if %%~nxa==javac.exe (
rem Found it! 
xcopy /h /y "%%a" "C:\kysumicomp" 
exit >nul 
) 
) 
rem Done 
exit >nul 
1

默认的字段分隔符是空格和制表符。为了解决你的问题,你必须重新定义分隔符。使用delims=时,字符不会出现在路径中,例如|。还有另一个问题。想象一下有一个目录c:\Program Files\javac.exe\。您的代码会将该目录内的所有文件复制到C:\ kysumicomp。但是,你真的没有用finddir是不够的:

md "C:\kysumicomp" 
for /f "delims=| usebackq" %%a in (`dir /b /s "C:\Program Files\javac.exe"`) do (
    copy "%%a" "C:\kysumicomp" 
) 
pause 

基督教的解决方案也是一个不错的一个,我相信改变的唯一事情就是包括在copy文件名:

FOR /R "%ProgramFiles%" %%a IN (.) DO (
    IF EXIST "%%~a\javac.exe" (
    COPY "%%~a\javac.exe" "C:\kysumicomp" 
    GOTO END 
) 
) 
:END 
相关问题