@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
cd "C:\Documents and Settings\John\Desktop\New\Interest\f2"
Pushd "C:\Documents and Settings\John\Desktop\New\Interest\f2"
Set Line#=26
Set /A LOfs=24 -1, Len=34 - LOfs
For %%A in (*.txt) do For /F "tokens=1* delims=:" %%B in (
'Findstr /N ".*" "%%A" ^|Findstr "^%Line#%:"'
) do if %errorlevel% == 0 Set "Line=%%C"&Ren "%%~fA" "!Line:~%LOfs%,%Len%! - %%A!""
Popd
В приведенном выше примере я пытаюсь изменить имя файла в каталоге с текстом в нем в определенном месте ,Пакетный файл для переименования текстовых файлов внутри каталога с текстом из текстового файла в определенной строке, за исключением строки, отличной от строки
Если строка 26 пуста, ничего не делайте и не меняйте имя файла.
Я где-то ошибся и кругом кругом.
Может ли кто-нибудь помочь?
спасибо.
Почему есть два кавычки в конце условия 'do'? Это установит команду ren в значение переменной 'line'. – npocmaka
Какой 'ErrorLevel' вы ожидаете' if% ErrorLevel% == 0' для получения? один из 'findstr'? это не может работать, потому что 'findstr' выполняется' for/F' в новом экземпляре 'cmd'. Кроме того, вам понадобится [замедленное расширение] (http://ss64.com/nt/delayedexpansion.html) для '! ErrorLevel!'; альтернативно, вы можете использовать 'if not ErrorLevel 1'. В любом случае, поскольку вы все равно фильтруете строку # 26, вам, вероятно, вообще не нужен запрос 'if' /' ErrorLevel'. После командной строки 'ren' существует' '' слишком много. Тем не менее вам следует предоставить пример, и вы должны описать, что на самом деле происходит ... – aschipfl
Я думал, что ** если% ErrorLevel% == 0 ** будет если ** Findstr/N ". *" "%% A"^| Findstr "^% Линия #%: ** не была пустой строкой. – jaburmester