for /d %%i in (c:\*) do if XXX (exec1 "%%~i") else (exec2 "%%~2") でXXXの条件が%%iがsで終わっていたらというのにしたいんですがどうすればいいですか? c:\windows, c:\usersなどはexec1 それ以外ならexec2に分岐したいのです
10 :
一度何かの変数に入れるしかないな
11 :
findstrをかませるんだな
12 :
for /d %%i in (c:\*) do ( set s="%%~i" call :sub "%%~i" ) exit :sub if "%s:~-2%=="s" (exec1 "%~1") else (exec2 "%~1") exit /b
13 :
for /d %%i in (c:\*) do (echo %%i)|findstr /e "s" && (exec1 "%%~i") || (exec2 "%%~2")
14 :
俺様の力作バッチを皆に恵んであげよう pushd X:\エロ画像 || goto :eof rem カレントディレクトリのファイルをMD5ハッシュ値にリネーム 要md5sum for %%i in (*) do for /f "usebackq delims= " %%j in (`md5sum "%%~i"`) do ren "%%~i" "@%%j%%~xi" rem 16個のサブフォルダに振り分け for %%i in (0 1 2 3 4 5 6 7 8 9 A B C D E F) do (mkdir @%%i&move @%%i*.* @%%i\) mkdir 重複&move *.* 重複\ rem 画像をランダムに開く 要ruby ruby -x "%~f0" popd goto :eof #!ruby `dir /s /b /a:-d`.split("\n").shuffle.each{|i| `start "" "#{i}"`; gets}
15 :
おー凄い、馬力作バッチ
16 :
ばか 作 ぱっち
17 :
@がキモい
18 :
コマンドプロンプトでバッチの引数に「^^"&time /t」を指定したとして、 これを変数に格納する事ってできますか? C:\>a.bat ^^"&time /t 『a.bat』 ================================ @echo on set AAA=%1 set AAA=%~1 set "AAA=%1" set "AAA=%~1" ================================ 結果 ================================ C:\>set AAA=" & time /t 23:08 C:\>set AAA=" & time /t 23:08 C:\>set "AAA=^" & time /t" 23:08 C:\>set "AAA=^" & time /t" 23:08 ================================
19 :
パス
20 :
for /r %i (*) do @echo.%i とやると途中からecho %i.%iとやったのと同じになるんですが 誰か理由わかりますか?
setって変数を宣言するものですよね? コマンドプロンプトで動作するプログラム(mysqlとかsqlite3)を実行中に標準入力を受け付けてるところに指定した文字列を入力したいだけなんですが set pass=1234 mysql -u root -p REM パスワード入力 REM ここでパスワード入力待ちになる REM ここで変数passを入力したい
43 :
ああ、そっちか 標準入力のリダイレクトでダメなら、バッチファイルだけでは辛いかも
44 :
お前には無理
45 :
>>42 set pass=1234 echo pass|mysql -u root -p ではどうですか?
それよくあるバグだな @ECHO OFF REM 使用法: 切り出し.CMD 開始文字列 終了文字列 ファイル SETLOCAL ENABLEDELAYEDEXPANSION (FOR /F "delims=[] tokens=1*" %%0 IN ('FIND /N /V ""') DO ( IF "!FLAG!"=="1" SET FLAG=2 IF "!FLAG!"=="3" SET FLAG=4 SET "LINE=%%1" if defined line SET "LINE=!LINE:%1=!" if defined line IF NOT "!LINE!"=="%%1" SET FLAG=1 SET "LINE=%%1" if defined line SET "LINE=!LINE:%2=!" if defined line IF NOT "!LINE!"=="%%1" SET FLAG=3 IF "!FLAG!"=="1" ECHO=%%1 IF "!FLAG!"=="3" ECHO=%%1 IF "!FLAG!"=="3" GOTO :EOF IF "!FLAG!"=="2" ECHO=%%1 ) )<%3
pushd %1 && for /r %%I in ("* *") do ( set xxx="%%~nxI" call ren "%%~I" %%xxx: =_%% )
80 :
/rを追加でできるんですね、覚えておきます ありがとうございました
81 :
質問なんですがちょっと長いです、申し訳ないです C:\a\とD:\a\内のfile.datの更新日時を比較して、C:\a\file.datのほうが新しい場合、それをD:\a\にコピーするバッチを作りました 00 for %%c in (C:\a\file.dat) do set cdate=%%~tc 01 set cdate=%cdate:~2,2%%cdate:~5,2%%cdate:~8,2%%cdate:~11,2%%cdate:~14,2% 02 for %%d in (D:\a\file.dat) do set ddate=%%~td 03 set ddate=%ddate:~2,2%%ddate:~5,2%%ddate:~8,2%%ddate:~11,2%%ddate:~14,2% 04 if %cdate% GTR %ddate% xcopy "C:\a\file.dat" "D:\a\" /e /y 00で更新日時を取得して、01で「2012/07/05 02:36」を「1207050236」に変換します 02と03も同じようなことをして、04で比較とコピーを行います
それで今回、フォルダbやcなどが増えそうなので、folders.txtに名前を書かれたフォルダ全てを扱うためのバッチを作り直したのですが、 これがよく分からんのですが思ったように動きません 作り直したと言ってもFOR文をネストしただけなのですが 00 for /f %%f in (C:\folders.txt) ( 01 for %%c in (C:\%%f\file.dat) do set cdate=%%~tc 02 set cdate=%cdate:~2,2%%cdate:~5,2%%cdate:~8,2%%cdate:~11,2%%cdate:~14,2% 03 for %%d in (D:\%%f\file.dat) do set ddate=%%~td 04 set ddate=%ddate:~2,2%%ddate:~5,2%%ddate:~8,2%%ddate:~11,2%%ddate:~14,2% 05 if %cdate% GTR %ddate% xcopy "C:\%%f\file.dat" "D:\%%f\" /e /y 06 ) 05を伏せる代わりにpauseを入れて観察したところ、01と03に問題があるようで、file.datを見つけられていないようでした 少し粘ったのですが無理そうなので、「他の方法」を使いたいのですが、私の知識は浅すぎて皆目検討がつきません そこで皆さんに「他の方法」を教えていただきたいのです。どうかよろしくお願いしますm(_ _)m