2015-10-29 3 views
0

xпереименовать и заменить символы windows batch script

Не удалось переименовать файл в оконном пакетном скрипте. пожалуйста добросердечно советую. ценим помощь

set "source=C:\Users\Processed" 

    for /f "delims=" %%A in ('findstr /s /m /l /c:"949010" "%source%\*"') 
     do (
     set "fname=%%A" 
      setlocal enabledelayedexpansion 
      set "fname=!fname:{=!" 
      ren %%A "!fname!" 
      endlocal & 
     copy /y "%source%\%fname%" "C:\Users\949010") 
+0

Что ожидаемое имя файла после этого сценария работает? –

+1

Я вижу, что у вас есть строка 'set 'fname =! Fname: {=%" '. Вы имели в виду сказать «set» fname =! Fname: {=! "' Вместо этого? – SomethingDark

+1

Кроме того, 'ren' требует два аргумента - исходное имя файла и имя для изменения файла. – SomethingDark

ответ

2

У вас есть 5 небольшие ошибки в коде , когда я рассмотрел его! BTW это плохая идея, чтобы изменить исходный код, без советов о том, что вы сделали в самой вопрос ...

  • Переменная fname должна содержать только имя и расширение файла, поэтому модификатор ~nx должен использоваться в переменной %%A.
  • Предложение do должно быть размещено в той же строке команды for.
  • В ren команды оба названия должны быть заключены в кавычках (не ошибка в это случая).
  • Значок & используется для разделения двух команд в той же строке. Это должно быть быть командой после &.
  • Все ссылки на переменную, которая изменяется внутри цикла for, должна быть заключена в восклицательные знаки.
  • Команда endlocal должна быть размещена после последней переменной с восклицательными знаками.

Я также модифицировал обоснование кода стандартным способом.

Это исправленный код:

set "source=C:\Users\Processed" 

for /f "delims=" %%A in ('findstr /s /m /l /c:"949010" "%source%\*"') do (
    set "fname=%%~nxA" 
    setlocal enabledelayedexpansion 
    set "fname=!fname:{=!" 
    ren "%%A" "!fname!" 
    copy /y "%source%\!fname!" "C:\Users\949010" 
    endlocal 
) 
+0

@aschipfl: Спасибо за редактирование! ** ':-)' ** – Aacini

+0

Всегда к вашим услугам! ;-) – aschipfl

+0

@aschipfl спасибо :) – william123456

0
set "source=C:\Users\Processed" 

for /f "delims=" %%A in ('findstr /s /m /l /c:"949010" "%source%\*"') do (
    set "fname=%%~nxA" 
    setlocal enabledelayedexpansion 
    set "fname=!fname:{=!" 
    ren "%%A" "!fname!" 
    copy /y "%%A" "C:\Users\949010" 
    endlocal 
) 
+0

Пожалуйста, объясните свой код ... – aschipfl

Смежные вопросы